我刚刚学习knockout.js。经过大量工作,我让这个小视图模型正常工作,但 ViewModel 的 shouldBeEnabled 方法看起来相当笨重。有没有更好的方法来绑定这个?
我想要实现的是,如果选择第一项,用户就无法选择第三项,反之亦然(如果用户选择了第三项,则无法选择第一项。)
看到这个fiddle http://jsfiddle.net/gregoryagu/rarKK/5/
<input type="checkbox" data-bind=" enable: shouldBeEnabled(reportType9, 9), checked: reportType9 " />Check 1
<br />
<input type="checkbox" data-bind=" enable: shouldBeEnabled(reportType11, 11), checked: reportType11" />Check 2
<br />
<input type="checkbox" data-bind=" enable: shouldBeEnabled(reportType12, 12), checked: reportType12" />Check 3
function ViewModel() {
var self = this;
self.reportType9 = ko.observable(false);
self.reportType11 = ko.observable(false);
self.reportType12 = ko.observable(false);
self.shouldBeEnabled = function (isChecked, id) {
switch (id) {
case 9:
if (isChecked()) {
self.reportType12();
return true;
}
else {
if (self.reportType12()) {
return false;
}
}
return true;
break;
case 12:
if (isChecked()) {
self.reportType9();
return true;
}
else {
if (self.reportType9()) {
return false;
}
}
return true;
default:
return true;
}
};
}
$(function () {
ko.applyBindings(new ViewModel());
})
如果你想让逻辑远离你的视线,你也可以使用computed
s.
http://jsfiddle.net/g2MQP/ http://jsfiddle.net/g2MQP/
function ViewModel() {
var self = this;
self.reportType9 = ko.observable(false);
self.reportType11 = ko.observable(false);
self.reportType12 = ko.observable(false);
self.reportType9Enabled = ko.computed(function () {
return !self.reportType12();
});
self.reportType11Enabled = ko.computed(function () {
return true;
});
self.reportType12Enabled = ko.computed(function () {
return !self.reportType9();
});
}
ko.applyBindings(new ViewModel());
View...
<input type="checkbox" data-bind=" enable: reportType9Enabled, checked: reportType9 " />Check 1
<br />
<input type="checkbox" data-bind=" enable: reportType11Enabled, checked: reportType11" />Check 2
<br />
<input type="checkbox" data-bind=" enable: reportType12Enabled, checked: reportType12" />Check 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)