KnockOut运行函数值已更改

时间:2013-08-15 13:02:54

标签: javascript knockout.js

获得简单的viewModel:

function viewModel() {
    enabled: ko.observable(false);
    ...
}

和一些绑定如:

<input data-bind="hasFocus: enabled" />

我希望在焦点上运行一些函数,而其他焦点丢失(或启用=真/假),但在值更改时运行。 有什么帮助吗?

3 个答案:

答案 0 :(得分:15)

您可以订阅已启用的功能,例如:

enabled.subscribe(function(newValue) {
   if(newValue) {  // Has focus

   } else { 
       // No focus
   }
});

答案 1 :(得分:2)

事件:{mouseover:enableDetails,mouseout:disableDetails}

试试这个:

<input data-bind="hasFocus: enabled, event: { focus: onFocus, blur: onBlur}" />

如果要监视值更改,则应在viewmodel中执行此操作:

this.enabled.subscribe(function(newValue){
    //use newValue
});

注意:viewmodel中存在语法错误:

enabled: ko.observable(false); <--

答案 2 :(得分:0)

通常,一个好的解决方案是订阅你的observable并在那里处理你的逻辑:

enabled.subscribe(function(newValue) {
    if (newValue) {
        //do something if it is true
    }
    else {
        //do something if false
    }
});