क्या कोई सरणी तत्वों को किसी सरणी के तत्वों में होने वाले परिवर्तनों के बारे में अधिसूचित किया गया है?एक सरणी के तत्वों के ko.computed ट्रैकिंग परिवर्तन
मेरी पहली सोचा क्योंकि
An observableArray tracks which objects are in the array, not the state of those objects
फिर भी, मैं कोड के इस टुकड़े पोस्टिंग कर रहा हूँ कि मैं क्या कोशिश कर रहा हूँ वर्णन करने के लिए observableArray उपयोग करने के लिए था, लेकिन यह काम नहीं किया, कर।
HTML:
<div data-bind="foreach:arr">
<input type="text" value="" data-bind="value: a" />
</div>
<div data-bind="foreach:arr">
<p>
Field "a" is changed: <span data-bind="text: aChanged()? 'true': 'false'"></span>
</p>
</div>
<p>
Some "a" field from the array is changed: <span data-bind="text: someAChanged()? 'true': 'false'"></span>
</p>
जावास्क्रिप्ट:
function AppViewModel() {
this.arr = ko.observableArray([new A(), new A()]);
this.someAChanged = ko.computed(function() {
var ch = false;
var arr = this.arr();
for (var i = 0; i < arr.length; i ++) {
if (arr[i].aChanged()) {
ch = true;
break;
}
return ch;
}
}, this);
}
function A() {
this.a = ko.observable(1);
this.aChanged = ko.computed(function() {
return this.a() != 1;
}, this);
}
ko.applyBindings(new AppViewModel());
मैं अपने खुद के सवालों के जवाब देने को कोई अधिकार नहीं है के रूप में, मैं अपने विचार यहाँ पोस्टिंग कर रहा हूँ। मैंने "सब्सक्राइब" फ़ंक्शन का उपयोग करने का निर्णय लिया। मेरा समाधान एक सरणी के तत्वों के लिए "पैरेंट" लिंक जोड़ना है। जब भी एक नमूदार क्षेत्र बदल जाती है एक माता पिता के क्षेत्र अपने बच्चों पर निर्भर भी बदल जाती है:
function Child() {
this._parent = null;
this.observableField = ko.observable("");
this.observableField.subscribe(function (newVal) {
if (newVal... && this._parent) {
this._parent.anotherObservableField(...);
}
});
}
Child.prototype._setParent(parent) {...}
[नवनीत गुप्ता] (http://stackoverflow.com/users/3846772/navneet-gupta) इस पोस्ट: "यह कैसे काम करता है, तो नए आइटम observableArray में जोड़ रहे हैं वे कैसे की सदस्यता ली है करते हैं? ? " –
@ पीटरो कोई समस्या नहीं होनी चाहिए, क्योंकि गणना की गई 'this.arr() 'को आमंत्रित करती है, इसलिए यह सरणी के साथ-साथ' ko.utils.arrayForEach' कॉल 'में पंजीकृत होती है,' बदली 'प्रोप की सदस्यता लेगी नए जोड़े गए आइटम का। – Tyblitz