用于比较淘汰观察者的习语

时间:2012-03-23 14:10:02

标签: knockout.js

我有以下问题。 我想检查表中点击的项目是否与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
    }

因为项是一个observable是永远不为null; 我该如何检查是否尚未设置observable?

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:6)

在比较之前展开observable

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)

输出

未定义

答案 1 :(得分:2)

您可以使用括号来打开observable,如下所示:

var underlyingValue = item();

或者,如果您不确定该变量是否是可观察的,您可以使用此方法:

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

基本上检查变量是否是可观察的,如果是,它首先使用括号进行检查。

当你拥有潜在价值时,你可以做你通常会做的事情。