【问题标题】:idiom for comparing knockout observables比较淘汰赛可观察的成语
【发布时间】:2012-03-23 22:21:16
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    在比较之前解开 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)
    

    输出

    未定义

    是的

    【讨论】:

      【解决方案2】:

      您可以使用括号打开可观察对象,如下所示:

      var underlyingValue = item();
      

      或者,如果你不确定变量是否是可观察的,你可以使用这个方法:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-11-05
        • 2012-09-08
        • 2012-07-07
        • 2015-01-25
        • 1970-01-01
        • 2015-10-05
        • 2018-03-30
        • 2023-03-11
        相关资源
        最近更新 更多