2012-11-10 46 views
2

可以说我有name = ko.observable('John')作为值绑定到input。如果name被更改,我需要显示(隐藏之前)<button>Save</button>。所以如果我编辑名称从JohnJack然后保存按钮应该出现,如果编辑回John它应该再次隐藏。你有什么想法可以在这里适用什么样的绑定/扩展?
非常感谢!已更改反应值

回答

3

你需要什么叫做脏跟踪。

有劫插件叫做KoLite其中包含一个肮脏的标志实现(你可以看到它是如何工作的this article):

的使用非常简单,你只需要你的obserables传递到ko.DirtyFlag(此将返回计算观察到的)方法:

var ViewModel = function() { 
    var self = this; 
    self.name = ko.observable('John'); 
    self.dirtyFlag = new ko.DirtyFlag(self.name); 
} 

而且在你看来,你可以绑定到isDirty财产上的dirtyFlag

<input type="text" data-bind="value: name, valueUpdate: 'keyup'"/> 
<div data-bind="if: dirtyFlag().isDirty"> 
    <button>Save</button> 
</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

Demo fiddle.