从视图引用observableArray对象属性。

时间:2015-01-12 22:22:29

标签: javascript knockout.js

当我尝试根据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() 

我错过了什么或我错在哪里?

1 个答案:

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