add more comments
This commit is contained in:
parent
2f4cb14b09
commit
19ba83f273
|
@ -34,7 +34,7 @@ app.directive("indeterminate", [
|
|||
}
|
||||
};
|
||||
};
|
||||
var passIfNotIsLeafChild = function (callback) { // ensure to execute callback only when this input hasn't subinput
|
||||
var passIfNotIsLeafChild = function (callback) { // ensure to execute callback only when this input hasn't any subinput
|
||||
return function () {
|
||||
if (children.length === 0) {
|
||||
callback.apply(this, arguments);
|
||||
|
@ -48,44 +48,45 @@ app.directive("indeterminate", [
|
|||
}
|
||||
};
|
||||
};
|
||||
var passIfIsIndeterminate = function (callback) { // pass through the event from the scope where they sent
|
||||
var passIfIsIndeterminate = function (callback) { // pass through the event when this input is indeterminate
|
||||
return function () {
|
||||
if (!elem.prop("indeterminate")) {
|
||||
return callback.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
};
|
||||
var catchEventOnlyOnce = function (callback) { // only fire once, and stop event's propagation
|
||||
return function (event) {
|
||||
callback.apply(this, arguments);
|
||||
return event.stopPropagation();
|
||||
};
|
||||
};
|
||||
/* var catchEventOnlyOnce = function (callback) { // only fire once, and stop event's propagation
|
||||
return function (event) {
|
||||
callback.apply(this, arguments);
|
||||
return event.stopPropagation();
|
||||
};
|
||||
}; */
|
||||
if (attr["indeterminate"] && parse(attr["indeterminate"]).constant) {
|
||||
setIndeterminateState(scope.$eval(attr["indeterminate"])); // set to default value (set in template)
|
||||
}
|
||||
if (attr["indeterminate"] && parse(attr["indeterminate"]).constant && !scope.$eval(attr["indeterminate"])) {
|
||||
// when this input wont have subinput, they will only receive parent change and emit child change event
|
||||
ngModelCtrl.$viewChangeListeners.push(passIfNotIsLeafChild(function () {
|
||||
scope.$emit("childSelectedChange", get());
|
||||
scope.$emit("childSelectedChange", get()); // notifies parents to change their state
|
||||
}));
|
||||
scope.$on("ParentSelectedChange", passThroughThisScope(passIfNotIsLeafChild(
|
||||
function (event, newVal) {
|
||||
setModelValueWithSideEffect(newVal); // set value to parent's value; this will cause listener to emit childChange event; this won't be a infinite loop
|
||||
})));
|
||||
// init first time and only once
|
||||
scope.$emit("i'm child input", get);
|
||||
scope.$emit("i'm child input", get); // traverses upwards toward the root scope notifying the listeners for keep reference to this input's value
|
||||
scope.$emit("childSelectedChange", get()); // force emitted, and force the parent change their state base on children at first time
|
||||
} else {
|
||||
// establish parent-child's relation
|
||||
// listen for the child emitted token
|
||||
scope.$on("i'm child input", passThroughThisScope(
|
||||
scope.$on("i'm child input", passThroughThisScope( // can't apply pass passIfIsLeafChild, at beginning all has not child input
|
||||
function (event, child) {
|
||||
children.push(child);
|
||||
})
|
||||
);
|
||||
var updateBaseOnChildrenState = function (event, newChildValue) {
|
||||
if ((cacheSelectedSubInputNumber + cacheNoSelectedSubInputNumber) !== children.length) {
|
||||
// cache childern state
|
||||
cacheSelectedSubInputNumber = 0;
|
||||
cacheNoSelectedSubInputNumber = 0;
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
|
@ -106,7 +107,7 @@ app.directive("indeterminate", [
|
|||
cacheNoSelectedSubInputNumber++;
|
||||
}
|
||||
}
|
||||
var allSelected = (cacheNoSelectedSubInputNumber === 0);
|
||||
var allSelected = (cacheNoSelectedSubInputNumber === 0); // if doesn't has any no selected input
|
||||
var anySeleted = (cacheSelectedSubInputNumber > 0);
|
||||
setIndeterminateState(allSelected !== anySeleted); // if at least one is selected, but not all then set input property indeterminate to true
|
||||
setModelValueWithSideEffect(allSelected); // change binding model value and trigger onchange event
|
||||
|
|
Loading…
Reference in New Issue
Block a user