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