2013-02-02 46 views
1

我想返回一個可觀察的屬性,但似乎缺少的東西。KnockoutJS - 計算可保存和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

這是因爲... e 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/

3

你是在正確的軌道上,因爲你的selectedAccountType是可觀察到的,你需要與selectedAccountType()

所以正確的語法來訪問它的價值:self.selectedAccountType().AccountTypeID;

但是因爲你需要首先檢查self.selectedAccountType()可以爲空之前它訪問AccountTypeID

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

演示Fiddle