【问题标题】:Bind modified in runtime viewmodel在运行时视图模型中修改的绑定
【发布时间】:2014-03-05 22:48:11
【问题描述】:

我遇到了在运行时视图模型通过原型修改到特定 html 元素的绑定问题。 我已经向模型添加了一个数组,但是在应用绑定之后 - 什么也没有发生。添加了 observables 工作正常,但问题正是数组。

这是一个带有代码的 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'));

谢谢你的建议。

【问题讨论】:

  • 关于你的小提琴......你的意思是 $data.selectedItems 而不是 $.data.items?
  • $data.items - 通过proto添加的数组
  • 抱歉,但你的问题(你到底在问什么?你问题中的代码并不是真正的repro 问题)也不是小提琴(第二个@veritasetratio 的评论,即使那样它也做了我的事情d期望它这样做)很有意义。您能否编辑并澄清一下?

标签: javascript mvvm knockout.js


【解决方案1】:

问题是 ko.cleanNode 是not working as you think it is。它并没有像您想象的那样删除所有绑定。

我建议完全删除您的节点 div,然后克隆并重新添加它。如果您碰巧使用 jQuery,那么自然地 jQuery 会让这一切变得简单。否则我会备份一点,并真正评估您是否需要将东西添加到 viewModel 的原型,然后重新绑定到您的 div。你确定 if 绑定不会做你想要的吗?

另外,请考虑使用淘汰赛 3 测试此代码 - 我相信您会收到有关多次应用绑定的错误。

【讨论】:

  • 我无法完全删除节点 div,因为在我的项目中我将值绑定到所有页面,包括页面标题和头部的其他一些位置,所以我无法删除我的 HTML 节点...跨度>
  • @coirius - 然后看看使用 if 绑定重新生成节点。另请注意,您可以删除给定节点,然后重新添加它,并重新调用 IT 应用绑定。或者您可以在其上调用 applyBindingsToNode,并提供根上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多