2012-03-23 60 views
4

我有以下問題。 我想檢查表中點擊的項目是否與model.selected不一樣。成語比較淘汰賽observables

var model= { 
items: ko.observableArray(), 
selected : ko.observable() 
}; 

<tbody> 
<!-- ko foreach: model.items --> 
<tr data-bind="click:$parent.model.set_selected_item"> 
<td style="cursor:pointer" data-bind="varchar : title"></td> 
</tr> 
<!-- /ko --> 
</tbody> 

//ID is an observable 
//selected may not be set yet - i.e an empty observable; 



var set_selected_item = function(item){ 
    //if item is different set 
     model.LandItem_selected(item); 
     do_routine(item) 
    //else 
     //do nothing 
    } 

因爲該項目是可觀察的是永遠不爲空; 我將如何檢查observable是否尚未設置?

任何幫助非常感謝。

回答

6

展開觀察到比較之前

var item1 = ko.observable() 
console.log(ko.utils.unwrapObservable(item1)) 
console.log(ko.utils.unwrapObservable(item1) == null) 
item1(1) 
console.log(ko.utils.unwrapObservable(item1) == null) 

輸出

不確定

真正

+0

謝謝 - 解開 - 知道了 – Chin 2012-03-23 14:30:10

2

你可以使用通過使用括號,這樣打通觀察到:

var underlyingValue = item(); 

,或者,如果你不能確定你的變量是可觀察到的,你可以用這個方法:

var underlyingValue = ko.utils.unwrapObservable(item); 

基本上檢查變量是否是可觀察到的或不和,如果它是,它的首先是括號。

當你有潛在的價值時,你可以做你平常會做的事情。