使用Knockout,如何根据可观察值的任意值触发函数?

时间:2012-06-11 09:47:44

标签: knockout.js

我是Knockout的新手,虽然之前我曾使用过一个可观察的模式库,但我不知道如何设置一个函数来观察ViewModel中的值,并在该值发生变化时触发。

情况是这样的: 当下拉列表的值为“other”时,我想要启用模态弹出窗口。我正在使用Twitter引导程序“下拉列表”(这实际上是一个锚点列表),每个锚点都有一个click绑定到ViewModel上名为setDetail的函数。 setDetail设置名为problem的可观察属性的值。

我的想法是设置一个函数来观察problem的值,以保持逻辑分离。有没有办法做到这一点,还是应该将代码放在setDetail函数中?

感谢任何帮助!

2 个答案:

答案 0 :(得分:7)

是的,您可以明确订阅一个可观察的。

文档为available here,搜索显式订阅observables。

你会做的事情如下:

function ViewModel() {
  this.problem = ko.observable();
  this.problem.subscribe(function(newValue) {
    if (newValue === 'other') {
      // trigger modal
    }
  });
}

答案 1 :(得分:1)

这是一种方法,给定HTML

<div> 
    <select data-bind="options: dropdownOptions, selectedOptions: problem" ></select>        
</div>

和javascript ..

var ViewModel = function() {
    var self = this;
    this.problem = ko.observable();
    this.dropdownOptions = ko.observableArray(["1","2","3","other"]);                        

    this.problem.subscribe((function(selectedOption) {
        if(selectedOption == "other") {
            alert(self.problem());            
        }
    }));
}

ko.applyBindings(new ViewModel());
​

或小提琴:http://jsfiddle.net/keith_nicholas/pb5ja/2/