Javascript 在knockout.js中的ko.applyBindings之后向模型添加可观察属性

Javascript 在knockout.js中的ko.applyBindings之后向模型添加可观察属性,javascript,knockout.js,Javascript,Knockout.js,比如说 function Model(){}; var model = new Model(); ko.applyBinding(model); model.name = ko.observable('john'); 我知道代码不起作用,但有可能使它起作用吗 您可能需要再次调用ko.applyBindings。但我不确定它是否会起作用。如果没有,您可能需要查看KnockoutJS代码,以了解applyBindings的作用,然后找出需要调用的函数,以部分应用于新绑定。无需再次调用ko.app

比如说

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

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

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

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

无需再次调用ko.applyBindings。很可能在html代码之前调用了绑定代码。如果将applyBinding移动到document ready,一切都将正常

对于jquery:

$(function () {
    ko.applyBindings(viewModel);
});

这应该能够让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);

后者将在street对象上创建一个绑定,而在name对象上创建第二个绑定

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

<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>

var viewModelA={
姓名:ko.observable(“约翰”)
};
var viewModelB={
名称:ko.可观测(“Doe”)
};
应用绑定(viewModelA,document.getElementById(“viewOne”);
应用绑定(viewModelB,document.getElementById(“viewTwo”);

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

我可以通过使用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>
函数模型(){};
var模型=新模型();
ko.应用绑定(模型);
model.name=ko.observable('john');
var myDiv=$('#myDiv')[0];
ko.cleanNode(myDiv);
ko.应用绑定(模型,myDiv);

不,这不是关于文档准备的问题。我需要在运行时在某些环境中添加额外的字段。