我想遍历一个observableArray对象,在这个循环中,我必须获得另一个observableArray的相应值。我没有成功这样做。
我的代码如下。
模型和视图模型:
//**********MODEL********************
function Configuration() {
var self = this;
self.properties = ko.observableArray();
}
function deviceProperty() {
var self = this;
self.property = ko.observable("");
self.value = ko.observable("");
}
//**********VIEWMODEL****************
function compareModelView() {
var self = this;
self.config1 = ko.observable(new Configuration);
self.config2 = ko.observable(new Configuration);
$().ready(function () {
//Load config1 and config2
});
}
//**********jQuery********************
(function ($) {
$(document).ready(function () {
ko.applyBindings(new compareModelView());
});
})(jQuery);
查看:
<!-- ko foreach: config1().properties -->
<tr>
<td data-bind="text: property()"></td>
<td data-bind="text: value()"></td>
<td data-bind="text: $root.config2().properties()[$index].value()"></td>
</tr>
<!-- /ko -->
Knockoutjs发出错误,说该属性不存在。
当我$root.config2().properties().length
时,它返回一个数字(3)。
当我$root.config2().properties()[0]
时,它返回[Object] [Object]。
当我$root.config2().properties()[0]
时,它返回一个空字符串。
但我看不出如何直接处理对象中的value属性?
答案 0 :(得分:1)
$index
是一个可观察的属性(请参阅doc),因此您需要编写$index()
来获取其值。
因此以下绑定应该有效:
<td data-bind="text: $root.config2().properties()[$index()].value()"></td>
虽然您的主要问题是$index()
,但它本身并不能解决您的情况,因为在这种情况下集合的填充顺序很重要,因此您的当前设置会出错。
因此,如果您首先填充config1()
KO开始绑定您的表,但如果尚未填充config2()
,您将获得一些未定义的错误。要修复它,您需要更改填充顺序以首先填充config2()
。
您可以在此处播放:http://jsfiddle.net/xwjKK只需更改订单pupulateConfig2
和pupulateConfig1
即可查看效果。