एक समारोह जिनका एकमात्र उद्देश्य एक नमूदार अभिकलन वापस जाने के लिए है बनाएँ। यह वांछित पैरामीटर में ले सकता है जैसा आप चाहते थे। यदि आप इसे दो-तरफा बाध्यकारी बनाना चाहते हैं तो इसे एक अलग गणना करने योग्य अवलोकन योग्य होना होगा।
फिर अपने बाध्यकारी में, उचित तर्क के साथ कार्य करें। इसकी गणना की गणना की गई गणना आपके दृश्य में बाध्य होगी और सामान्य रूप से अपडेट हो जाएगी।
यहां a fiddle है जहां मैंने ईवेंट हैंडलर बनाने के लिए इस तकनीक का उपयोग किया था। आप यहां कुछ ऐसा कर सकते हैं।
आप कार्य को देखने योग्य तरीके से एक विधि बनाकर इसे साफ रख सकते हैं। या तो ko.observable.fn
प्रोटोटाइप को जोड़कर या इसे सीधे देखने योग्य उदाहरण में जोड़कर।
ko.observable.fn.bit = function (bit) {
return ko.computed({
read: function() {
return !!(this() & bit);
},
write: function (checked) {
if (checked)
this(this() | bit);
else
this(this() & ~bit);
}
}, this);
};
// or
function ViewModel() {
this.flags = ko.observable(0);
this.flags.bit = function (bit) {
return ko.computed({
read: function() {
return !!(this() & bit);
},
write: function (checked) {
if (checked)
this(this() | bit);
else
this(this() & ~bit);
}
}, this);
}.bind(this.flags);
}
तो अगर आप सिर्फ आपके विचार मॉडल में एक भी मूल्य के लिए उन सभी चेक बॉक्स बाध्य करने के लिए कोशिश कर रहे हैं आपके विचार
<input type="checkbox" data-bind="checked: flags.bit(0x1)"/>
<input type="checkbox" data-bind="checked: flags.bit(0x2)"/>
<input type="checkbox" data-bind="checked: flags.bit(0x4)"/>
<input type="checkbox" data-bind="checked: flags.bit(0x8)"/>
Demo
हालांकि करने के लिए लागू होते हैं, आप डॉन ' टी करने की जरूरत नहीं है। अपने दृश्य मॉडल में किसी सरणी पर checked
बाइंडिंग का उपयोग करें और अपने चेकबॉक्स को एक मान दें। प्रत्येक चेक किए गए मान को सरणी में जोड़ा जाएगा। और यह दो तरह से बाध्यकारी होगा।
<input type="checkbox" data-bind="checked: checkedValues, value: 1"/>
<input type="checkbox" data-bind="checked: checkedValues, value: 2"/>
<input type="checkbox" data-bind="checked: checkedValues, value: 3"/>
<input type="checkbox" data-bind="checked: checkedValues, value: 4"/>
var viewModel = {
checkedValues: ko.observableArray([])
};
Demo
स्रोत
2012-11-04 06:29:22
धन्यवाद, यह बहुत अच्छा है। वास्तव में मैं जो खोज रहा था। –