2012-03-23 3 views
4

다음과 같은 문제가 있습니다. 테이블에서 클릭 한 항목이 model.selected와 같지 않은지 확인하고 싶습니다.녹아웃 관측 값 비교 용 관용어

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 
    } 

항목이 관찰 가능이기 때문에 is is null이 아닙니다. 관찰 가능 항목이 아직 설정되지 않았는지 확인하려면 어떻게해야합니까?

도움을 주시면 감사하겠습니다.

답변

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

감사합니다. - unwrap - got it – Chin

2

당신은 다음과 같이 괄호를 사용하여 관찰을 열어 사용할 수 있습니다

var underlyingValue = item(); 

또는, 당신은 변수가이 방법을 사용할 수있는 관찰 할 경우 불확실한 경우 :

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

기본적으로 변수가 관측인지 여부를 확인하고이 경우, 그것은 않습니다 먼저 괄호를 사용하십시오.

기본 가치가있을 때 평상시처럼 할 수 있습니다.