我正在使用淘汰赛,并遇到了一个我不知道如何修复的问题。我从asp.net mvc控制器中检索一个json对象。我将它传递给以下函数:
load = function (data) {
var myViewModel = function () {
var self = this;
ko.mapping.fromJS(data, self);
self.hasItems = ko.computed(function () {
return self.NumberOfItems > 0;
}, self);
};
ko.applyBindings(myViewModel, window.document.getElementById("my-container"));
}
我根据json中返回的内容向模型对象添加自定义行为,特别是json的NumberOfItems属性。我的标记是:
<div class="content" style="display: none;" data-bind="visible: hasItems === false">
<span class="empty">My Items</span>
</div>
但我一直收到这个错误:
错误:无法解析绑定。 消息:ReferenceError:未定义hasItems; 绑定值:visible:hasItems === false
我不知道为什么 - 我是新手,所以非常感谢任何帮助?
答案 0 :(得分:2)
applyBindings需要一个对象。尝试
ko.applyBindings(new myViewModel(), window.document.getElementById("my-container"));
此外,当你想获得一个observable的值时,你需要使用括号。
return self.NumberOfItems() > 0;
答案 1 :(得分:0)
除了ckal回答你可能也想用这种方式使用ko.mappings:
ko.mapping.fromJS(data, {}, self);
答案 2 :(得分:0)
您看到的'无法解析绑定'的错误意味着敲除无法找到您尝试绑定的内容(hasItems)。
我认为这是因为你只是在调用load函数时创建viewModel,但是在解析绑定时viewModel不存在,所以它会抱怨。
我会尝试更像这样设置你的viewModel:
var myViewModel = function () {
var self = this;
self.load = function (data) {
ko.mapping.fromJS(data, self);
}
self.hasItems = ko.computed(function () {
return self.NumberOfItems > 0;
}, self);
};
ko.applyBindings(new myViewModel(), window.document.getElementById("my-container"));
然后,您可以在viewModel中调用load函数来代替调用当前加载函数的位置。