无法解析绑定敲除错误
我正在与淘汰赛,并遇到了一个问题,我不知道如何解决。我从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
我不知道为什么 - 我是这个新手所以非常感谢任何帮助?
applyBindings需要一个对象。尝试
ko.applyBindings(new myViewModel(), window.document.getElementById("my-container"));
此外,当您想要获得可观察值的值时,您需要使用括号。
return self.NumberOfItems() > 0;
除了ckal的答案,你可能也想用ko.mappings这样:
ko.mapping.fromJS(data, {}, self);
你看到“无法解析绑定”的错误意味着淘汰赛能找不到你想要绑定的东西(hasItems)。
我认为这是因为你只是在调用load函数时创建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"));
然后,您可以调用加载功能在视图模型的地方,你在呼唤你的当前负载的功能。
当我传递给applyBindings时,是否需要创建myViewModel的新实例?新的myViewModel()? – amateur 2013-02-20 21:46:03
是的,请检查ckal的答案。 – 2013-02-20 21:57:47
你看起来像你,我会更新我的答案。 – 2013-02-20 22:43:25
谢谢 - 有什么区别? – amateur 2013-02-20 21:16:25
第二个参数是自定义映射,如果要指定更新目标,则需要将其作为第三个参数传递 - 请在此处查看:http://knockoutjs.com/documentation/plugins-mapping.html中的“指定更新目标“ – 2013-02-20 21:23:54