例如
function Model(){};
var model = new Model();
ko.applyBinding(model);
model.name = ko.observable('john');
我知道代码不起作用,但有可能让它起作用吗?
例如
function Model(){};
var model = new Model();
ko.applyBinding(model);
model.name = ko.observable('john');
我知道代码不起作用,但有可能让它起作用吗?
我能够通过使用 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>
一个可能的解决方案是绑定到局部视图,例如:
<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>
因此,在您的情况下,添加新属性后,您只能在需要新数据的视图部分再次应用绑定。
您可能需要ko.applyBindings
再次致电。我不确定它是否会起作用。如果没有,您可能需要查看 KnockoutJS 代码以找出applyBindings
功能,然后找出您需要调用的函数以部分应用于您的新绑定。
这应该能够让 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);
后者将在街道对象上创建单个绑定,但是将在名称对象上创建第二个绑定。
无需再次调用 ko.applyBindings。很可能在您的 html 代码之前调用您的绑定代码。如果您将 applyBinding 移动到文档准备就绪,一切都会好起来的!
对于 jQuery:
$(function () {
ko.applyBindings(viewModel);
});