当我尝试根据Knockout.JS
中的特定对象属性设置按钮的可见性时,observableArray
出现了问题。对象绑定到我的视图就是这个:
function IncomeDeclarationHub() {
var self = this;
//Other properties
self.IncomeDeclarationViewModel = ko.observableArray();
}
当然,这是用于填充observableArray
:
function IncomeDeclarationViewModel(data) {
var self = this;
//Other properties
self.IsSent = ko.observable(data.IsSent);
}
在某些时候,我用IncomeDeclarationViewModel
填充数据,它工作正常。问题是,只有当来自IsSent
的第一个元素的属性observableArray
为真时,我才需要显示一个按钮。所以我尝试了很多东西:
<input type="image" data-bind="visible: IncomeDeclarationViewModel()[0].IsSent()" />
同时更改我为visible: IncomeDeclarationViewModel[0].IsSent()
或visible: IncomeDeclarationViewModel()[0].IsSent
提供参考的位置。
但我一直收到错误:
Uncaught Error: Unable to parse bindings.
Message: TypeError: Cannot read property 'IsSent' of undefined;
Bindings value: click: Print, visible: myIncomeDeclarationViewModel()[0].IsSent()
我错过了什么或我错在哪里?
答案 0 :(得分:1)
我认为这是因为在某些时候,没有填充IncomeDeclarationViewModel导致错误,因为如果数组为空,第一个元素中将没有对象。
将绑定更改为此选项以检查数组中是否有元素:
<input type="image" data-bind="visible: IncomeDeclarationViewModel().length > 0 && IncomeDeclarationViewModel()[0].IsSent()" />
另一种方法是使用with绑定,只有在IncomeDeclarationViewModel的第一项中有一个对象时,任何子绑定才会显示和执行:
<div data-bind="with: IncomeDeclarationViewModel()[0]">
<input type="image" data-bind="visible: IsSent" />
</div>