2014-02-08 75 views
1

我遇到了在运行时viewmodel通过原型修改为特定html元素的绑定问题。 我已经添加了一个数组来模型,但应用绑定后 - 什么也没有发生。增加了可观察的工作正常,但与数组完全一样的问题。在运行时修改视图模型

这里是代码的jsfiddle:click

var ViewModel = function() { 
    var self = this; 
    this.selectedItems = [{FullName: 'Mike'}]         
}; 
var model = new ViewModel(); 
ko.applyBindings(model,document.getElementById('node')); 
ko.cleanNode(document.getElementById('node')); 
model.__proto__.items = [{FullName: 'Michael'}]; 
ko.applyBindings(model, document.getElementById('node')); 

THX的意见。

+0

关于你的小提琴...你的意思是$ data.selectedItems而不是$ .data.items? – veritasetratio

+0

$ data.items - 通过__proto__添加的数组 – vchyzhevskyi

+0

道歉,但你的问题(你在问什么?你的问题中的代码并不是真的[repro](http://sscce.org)问题),也不是小提琴(第二个@ veritasetratio的评论,即使如此,它做我期望它做)是很有道理的。你能否编辑和澄清? – Jeroen

回答

0

问题是ko.cleanNode是not working as you think it is。它不会按照您的想法移除所有绑定。

我会建议彻底删除你的节点div,然后克隆和重新添加它。当然,如果你碰巧使用了jQuery,这很容易。否则,我会备份一下,真正评估你是否需要添加东西到viewModel的原型,然后重新绑定到你的div。你确定一个if绑定不会做你想要的吗?

此外,请考虑测试此代码与淘汰赛3 - 我相信你会得到一个关于多次应用绑定的错误。

+0

我无法完全删除节点div,因为在我的项目中,我绑定了包括页标题在内的所有页面的值,所以我无法删除我的HTML节点... – vchyzhevskyi

+0

@coirius - 然后查看使用如果绑定重新生成节点。还要注意,你*可以*移除给定的节点,然后重新添加它,并重新调用应用绑定到IT。或者你可以在其上调用applyBindingsToNode,并提供一个根上下文。 –