मुझे नॉकआउट "चेक" बाध्यकारी के साथ समस्या हो रही है। ऐसा लगता है कि चेकबॉक्स पर "चेंज" ईवेंट पुराने मूल्य को पुराना मान देता है, इसे अद्यतन करने से पहले (इसलिए यदि यह अनचेक किया गया तो यह झूठा होगा)। मुझे नहीं लगता कि मैं मूल्य की सदस्यता ले सकता हूं क्योंकि मेरे पास ऑब्जेक्ट के अंदर है।नॉकआउट चेकबॉक्स परिवर्तन घटना पुराने मान भेजती है
<tbody data-bind="foreach: Categories">
<tr>
<td><input type="checkbox" data-bind="checked: ShowOpened, event: { change: $root.CategoryChange }" /></td>
</tr>
</tbody>
<script type="text/javascript">
var Category = function (Id, Name, Order, ShowOpened) {
this.Id = Id;
this.Name = Name;
this.Order = Order;
this.ShowOpened = ShowOpened;
this.IsUpdated = ko.observable(false);
this.OldOrder = Order;
this.OldShowOpened = ShowOpened;
};
var ViewModel = {
Categories: ko.observableArray([]),
CategoryChange: function(pCategory) {
if(pCategory.Order != pCategory.OldOrder || pCategory.ShowOpened != pCategory.OldShowOpened)
pCategory.IsUpdated(true);
else
pCategory.IsUpdated(false);
}
};
ko.applyBindings(ViewModel);
</script>
तो इस उदाहरण में मैं चेकबॉक्स कि CategoryChange विधि है कि वस्तु के अंदर एक चर बदल जाएगा (है कि मैं बाद में की जरूरत है पता है कि वस्तु अपडेट किया जाता है) ट्रिगर कर सकते हैं ShowOpened है। लेकिन जब चेचबॉक्स बदल जाता है तो यह हमेशा पुराना मान भेजता है, ट्रिगरिंग विधि, और उसके बाद मान बदलता है। क्या इसको ठीक करने का कोई तरीका है?
आपके कोड में कुछ गड़बड़ है। न तो 'दिखाया गया' और न ही 'IsUpdated' ko.observables हैं (और शायद यही कारण है कि आप हमेशा पुराने मान प्राप्त करते हैं)। यह कोड भी कैसे काम कर सकता है? 'श्रेणी बदलें 'को अपवाद फेंकना चाहिए। – freakish
@freakish आप राइट कर रहे हैं, मैं एक गलती जब इस पोस्ट मूल रूप से बनाने की है। लेकिन फिर भी आपने जो त्रुटि दी है वह समस्या नहीं है। – akhabaiev
ओई, अभी भी यह याद आ रही है: 'यह .ShowOpened = ko.observable (दिखाया गया); और यह:' pCategory.ShowOpened() '। मुझे कहना होगा, इस पोस्ट को लिखते समय आपने बहुत सी गलतियां की हैं ... – freakish