मेरे पास एक व्यूमोडेल है जिसमें एक अवलोकन योग्य है, जिसे किसी ऑब्जेक्ट के साथ प्रारंभ किया गया है। इस ऑब्जेक्ट में स्वयं अवलोकन योग्य हैं।नॉकआउट अवलोकन करने योग्य जटिल ऑब्जेक्ट में किसी भी बदलाव की सदस्यता लें
मेरा लक्ष्य अधिसूचित किया जाना है जब भी उस वस्तु परिवर्तन (या: जब उस वस्तु परिवर्तन में किसी भी नमूदार)
जटिल वस्तु:
var ns = ns || {};
ns.ComplexObj = function (item) {
var self = this;
if (!item) {
item = {};
}
self.id = item.Id || '';
self.company = ko.observable(item.Company || '');
self.email = ko.observable(item.Email || '');
self.company.subscribe(function() {
console.log('debug: company changed');
});
return self;
};
viewmodel
ns.mainvm = function() {
var simpleObject = ko.observable('i am pretty simple');
simpleObject.subscribe(function (newValue) {
document.getElementById('simpleSubscribtionFeedback').innerText = newValue;
});
var complexObject = ko.observable(ns.ComplexObj());
complexObject.subscribe(function (newValue) {
// i would like to react to any change in complex object
document.getElementById('complexSubscribtionFeedback').innerText = 'i dont get executed :(';
});
return {
simpleObject: simpleObject,
complexObject: complexObject
};
};
बाध्यकारी
var container = document.getElementById('wrapper');
if (container) {
ko.applyBindings(ns.mainvm, container);
} else {
console.warn("container for binding ko not found");
}
वहाँ एक जटिल वस्तु पर परिवर्तन पर प्रतिक्रिया करने के लिए किसी भी possiblity है? किसी भी मदद की सराहना की है।
मैंने पहले से ही rpniemeyer से dirtyFlag समाधान (टिप्पणियों में लिंक) की कोशिश की है। जटिल वस्तु पर गंदे झंडे की समस्या यह है कि जब यह "सत्य" पर स्विच हो जाता है और मैं उस ध्वज की सदस्यता में झुका रहा हूं, तो यह केवल पहली बार ठीक है। आगे के बदलावों पर प्रतिक्रिया करने के लिए, मुझे गंदे फ्लैग को फिर से झूठ में सेट करने की आवश्यकता होगी (सदस्यता में मेरी सामग्री करने के बाद)। जो एक सदस्यता पाश में नेतृत्व करेंगे।
[यह पोस्ट] (https://roysvork.wordpress.com/2014/01/12/tracking-changes-to-complex-viewmodels-with-knockout-js/) आपको शुरू हो सकता है। – Michael
आपकी टिप्पणी के लिए धन्यवाद! मैंने नीचे अपना प्रश्न संपादित किया। –
यह प्लगइन ठीक वही कर रहा है जो आपने किया था: https://github.com/ZiadJ/knockoutjs-reactor – Domysee