KnockoutJS - 计算了abservable和js对象

时间:2013-02-02 18:08:20

标签: javascript knockout.js

我正在尝试返回一个可观察的属性,但似乎遗漏了一些东西。

self.SelectedAccountTypeID = ko.computed(function () {
    return self.selectedAccountType.AccountTypeID();
}); 

我正在尝试返回selectedAccountType的AccountTypeID属性,但这不起作用

当我尝试

self.SelectedAccountTypeID = ko.computed(function () {
    return self.selectedAccountType();
}); 

它可以工作但返回一个javascript对象

这是代码的小提琴 http://jsfiddle.net/qafrD/

2 个答案:

答案 0 :(得分:3)

您走在正确的轨道上,因为selectedAccountType是一个可观察的,您需要使用selectedAccountType()

来访问其值

所以语法正确:self.selectedAccountType().AccountTypeID;

但是因为self.selectedAccountType()可以为null,所以在访问AccountTypeID之前需要先检查它:

self.SelectedAccountTypeID = ko.computed(function () {
    if (self.selectedAccountType())
        return self.selectedAccountType().AccountTypeID;
});    

演示Fiddle

答案 1 :(得分:2)

这是因为self.selectedAccountType是一个可观察的意思,你需要像函数一样调用它来检索它的当前值。但是“AccountTypeID”属性不是可观察的,因此这里不需要括号。

self.SelectedAccountTypeID = ko.computed(function () {
    // Retrieve the value of the observable
    var selectedAccountType = self.selectedAccountType();

    // The value may be "undefined" or "null" if there has not yet been
    // anything stored in the observable
    if (selectedAccountType && typeof selectedAccountType.AccountTypeID != "undefined") {
        return selectedAccountType.AccountTypeID;
    }

    // Return a default value otherwise
    return null;
});

演示:http://jsfiddle.net/qafrD/1/