5

例如

function Model(){};
var model = new Model();
ko.applyBinding(model);

model.name = ko.observable('john');

我知道代码不起作用,但有可能让它起作用吗?

4

5 回答 5

2

我能够通过使用 cleanNode 然后重新应用绑定来完成此操作。

function Model(){};
var model = new Model();
ko.applyBindings(model);

model.name = ko.observable('john');

var myDiv = $('#myDiv')[0];
ko.cleanNode(myDiv);
ko.applyBindings(model, myDiv);

<div id="myDiv">
    <span data-bind="text: name"></span>
</div>
于 2014-01-16T21:05:42.543 回答
1

一个可能的解决方案是绑定到局部视图,例如:

<div id="viewOne">
  <input data-bind="value: name" />
</div>

<div id="viewTwo">
  <input data-bind="value: name" />
</div>

<script type="text/javascript">
  var viewModelA = {
     name: ko.observable("John")
  };

  var viewModelB = {
     name: ko.observable("Doe")
  };

  ko.applyBindings(viewModelA, document.getElementById("viewOne"));
  ko.applyBindings(viewModelB, document.getElementById("viewTwo"));
</script>

因此,在您的情况下,添加新属性后,您只能在需要新数据的视图部分再次应用绑定。

于 2013-01-28T07:14:32.023 回答
0

您可能需要ko.applyBindings再次致电。我不确定它是否会起作用。如果没有,您可能需要查看 KnockoutJS 代码以找出applyBindings功能,然后找出您需要调用的函数以部分应用于您的新绑定。

于 2012-04-22T19:54:59.873 回答
0

这应该能够让 applyBindings 函数只添加一个 div。目前在我自己的应用程序中自己尝试。不过到目前为止还没有太多运气。不知道它在您的应用程序中会如何反应。

ko.applyBindings(model, document.getElementById('#yourdiv'));

仅使用模型调用 applyBindings 以将其绑定以在对象上创建其他绑定。不建议这样做。

function Model(){};
var model = new Model();
model.name = ko.observable('john');
ko.applyBindings(model);

model.street = ko.observable('stationstreet');
ko.applyBindings(model);

后者将在街道对象上创建单个绑定,但是将在名称对象上创建第二个绑定。

于 2012-11-21T15:09:37.663 回答
-2

无需再次调用 ko.applyBindings。很可能在您的 html 代码之前调用您的绑定代码。如果您将 applyBinding 移动到文档准备就绪,一切都会好起来的!

对于 jQuery:

$(function () {
    ko.applyBindings(viewModel);
});
于 2012-08-05T13:22:12.780 回答