मैं चेक बॉक्स का एक समूह हैknockoutjs में चेकबॉक्स निर्भरता कैसे लागू करने के लिए
- चेकबॉक्स एक
- चेकबॉक्स बी
- चेकबॉक्स सी
foreach डेटा बाइंडिंग के साथ जनरेट की गई
<input type="checkbox" data-bind="value: id, checked: $root.chkboxSelected" />
जो उन्हें लेते हैं एक अवलोकन योग्य से चेक राज्य। तो एक बॉक्स की जांच करने से सरणी में मानक मान जोड़ा जाएगा, मानक knockoutjs जो ठीक काम करता है। मैं फिर एक साधारण नियम जोड़ना चाहता था:
यदि सी चेक किया गया है, तो ए और बी को भी चेक किया जाना चाहिए।
knockoutjs में इस प्रकार के तर्क को जोड़ने का सबसे साफ तरीका क्या है? मैं एक लिखने योग्य गणनीय नमूदार साथ करने की कोशिश की:
var viewModel = {
foo: observableArray(),
..
};
viewModel.chkboxSelected = ko.computed({
read: function() {
return this.foo();
},
write: function(value){
//add it if not added already
if($.inArray(value, this.foo()) < 0) {
this.foo.push(value);
}
// if C is present then A,B must be as well
if($.inArray("C", this.foo()) >= 0) {
if($.inArray("B", this.foo()) < 0) {
this.foo().push("B");
}
if($.inArray("A", this.foo()) < 0) {
this.foo().push("A");
}
}
},
owner: viewModel
});
पढ़ने पर एक ब्रेकपाइंट लाना और कार्यों लिखें: पढ़ा बुलाया जाता है और पृष्ठ लोड ठीक। हालांकि, जब मैं तो किसी भी चेकबॉक्स मैं निम्नलिखित त्रुटि मिलती है पर क्लिक करें (लिखने ब्रेकप्वाइंट हिट हो जाता है कभी नहीं):
knockout-2.0.0.debug.js:2297
Uncaught TypeError: Object function dependentObservable() {
if (arguments.length > 0) {
if (typeof options["write"] === "function") {
// Writing a value
var valueForThis = options["owner"] || evaluatorFunctionTarget; // If undefined, it will default to "window" by convention. This might change in the future.
options["write"].apply(valueForThis, arguments);
} else {
throw "Cannot write a value to a dependentObservable unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.";
}
} else {
// Reading the value
if (!_hasBeenEvaluated)
evaluateImmediate();
ko.dependencyDetection.registerDependency(dependentObservable);
return _latestValue;
}
} has no method 'push'
निर्माण पूरी तरह से है, धन्यवाद! (फीडल 404 देता है) – dgorissen
संभवतः इसमें यह भी जोड़ना चाहिए कि टैग को चेकबॉक्स के साथ ठीक से काम करने के लिए, आपको attr करना होगा: {for: 'prefix-' + $ data.Id} बाध्यकारी टाइप करें। jQuery बटन, आदि के लिए वहां होने की आवश्यकता है –
आइटम्स सरणी में प्रत्येक आइटम के लिए 'चाहिएबीडिसेबल' क्यों कहा जाता है? मैं समझता हूं कि 'self.checked' परिवर्तन कब होता है, लेकिन यह पूरे' आइटम्स 'सरणी पर फिर से क्यों शुरू होता है? – arb