Knockout.js 两个可观察的耳环不';t使用嵌套的viewModel在同一页面中协同工作
我有这个模型: 视图模型 然后我用这种方式调用Web服务: Ajax调用 并以这种方式映射结果: 映射 另一个数组也是如此 下面是我的数据绑定: 数据绑定Knockout.js 两个可观察的耳环不';t使用嵌套的viewModel在同一页面中协同工作,knockout.js,knockout-2.0,Knockout.js,Knockout 2.0,我有这个模型: 视图模型 然后我用这种方式调用Web服务: Ajax调用 并以这种方式映射结果: 映射 另一个数组也是如此 下面是我的数据绑定: 数据绑定 西蒙·沃纳·汉森 swh002 西蒙·沃纳·汉森 swh002 如果我评论其中一个,另一个就可以了,但是如果它们在同一页上,那么这个表就是空的,没有错误或者什么都没有 a如何处理模型的上下文?我注意到您在映射代码中所做的操作 viewModel.sitesTable = ko.observableArray(itemRow); 我想知道
西蒙·沃纳·汉森
swh002
西蒙·沃纳·汉森
swh002
如果我评论其中一个,另一个就可以了,但是如果它们在同一页上,那么这个表就是空的,没有错误或者什么都没有
a如何处理模型的上下文?我注意到您在映射代码中所做的操作
viewModel.sitesTable = ko.observableArray(itemRow);
我想知道你是否想要
viewModel.sitesTable(itemRow);
一旦在初始化过程中创建了knockout observate或observatarray,就要小心不要用另一个新的observatarray覆盖它们,尤其是调用ko.applyBindings()之后 我认为最好用一个例子来说明这一点
//Initialize my view model
var myOriginalObservable = ko.observableArray([initialValue]);
var viewModel = {
modelProperty : myOriginalObservable
}
//Call applyBindings
ko.applyBindings(viewModel);
//In some other function, I reset viewModel.modelPropert = ko.observableArray()
var myNewObservable = ko.observableArray([newValue]);
viewModel.modelProperty = myNewObservable;
调用applyBindings后,其他一些操作会将我的viewModel属性设置为一个新的observable,而不仅仅是更改现有observable中的值。我在初始化中创建的可观察对象(myOriginalObservable)仍然存在,并且我的UI仍然绑定到它,但是当我更改viewModel.modelProperty指向的对象(myNewObservable)时,我丢失了对它的引用
我想这可能是您遇到的问题。我发现了问题
我在ajax调用的.always函数上应用了绑定ko.applyBinding,但是因为两个不同的原因,我调用了两次服务,绑定被应用了两次
我不知道为什么,但出于某种原因,这阻止了两个不同的ObservaterRay在同一个模型中协同工作。所以这是一个解决方案,但它不能解释为什么会发生这种情况
我刚刚在创建模型后将绑定移到函数外部。如果我像你在开始时说的那样(viewModel.sitesTable(itemRow);)它对我不起作用,我知道这是正确的方法,但是我使用它,我的表中没有显示任何内容。然后我按照你在文章第二部分中说的做了,但是代码和我的代码一样,没有区别。我很高兴你发现了这个问题,莫里齐奥。
<table id="tableDocs">
<tbody data-bind="foreach: documentsTable" >
<tr>
<td data-bind="text: nameCol">Simon Werner Hansen</td>
<td data-bind="text: pagesCol">swh002</td>
</tr>
</tbody>
</table>
<table id="tableSites">
<tbody data-bind="foreach: documentsTable" >
<tr>
<td data-bind="text: lastCol">Simon Werner Hansen</td>
<td data-bind="text: editedCol">swh002</td>
</tr>
</tbody>
</table>
viewModel.sitesTable = ko.observableArray(itemRow);
viewModel.sitesTable(itemRow);
//Initialize my view model
var myOriginalObservable = ko.observableArray([initialValue]);
var viewModel = {
modelProperty : myOriginalObservable
}
//Call applyBindings
ko.applyBindings(viewModel);
//In some other function, I reset viewModel.modelPropert = ko.observableArray()
var myNewObservable = ko.observableArray([newValue]);
viewModel.modelProperty = myNewObservable;