在knockout documentation中有一个checkedValue
绑定示例,可用于抓取$data
对象而不是复选框的值。一个版本的视图模型可以工作,而另一个版本的版本则没有。这是一个错误吗?
两种情况都使用以下HTML:
<!-- ko foreach: items -->
<input type="checkbox" data-bind="checkedValue: $data, checked: $root.chosenItems" />
<span data-bind="text: itemName"></span><br>
<!-- /ko -->
工作视图模型如下所示:
var viewModel = {
items: ko.observableArray([ { itemName: 'Choice 1' }, { itemName: 'Choice 2' }]),
chosenItems: ko.observableArray()
};
ko.applyBindings(viewModel);
类似的断开视图模型如下所示:
function viewModel() {
this.items = ko.observableArray([ { itemName: 'Choice 1' }, { itemName: 'Choice 2']);
this.chosenItems = ko.observableArray();
}
ko.applyBindings(new viewModel());
答案 0 :(得分:1)
在你的小提琴http://jsfiddle.net/dPBeA/中你已经包括了Knockout 3.x和Knockout 2.x
当我删除对Knockout 2.x的引用时,代码对我有效。确保你只包括Knockout 3.x
一旦你这样做,你的代码就可以了。
function viewModel() {
this.items = ko.observableArray([ { itemName: 'Choice 1' }, { itemName: 'Choice 2']);
this.chosenItems = ko.observableArray();
}
ko.applyBindings(new viewModel());
答案 1 :(得分:0)
如果您想命名模型和相关函数,这也有效:
(function (testing, $, undefined) {
function viewModel() {
var self = this;
self.items = ko.observableArray([{
itemName: 'Choice 1'
}, {
itemName: 'Choice 2'
}]);
self.chosenItems = ko.observableArray();
}
testing.ViewModel = viewModel;
}(window.testing = window.testing || {}, jQuery));
ko.applyBindings(new testing.ViewModel());