敲除从模型到视图的单向绑定

时间:2016-06-16 22:30:52

标签: knockout.js

使用Knockout,是否可以设置单向绑定,以便更改视图模型将更新视图,但更新视图不​​会更新视图模型?

我使用路由引擎从URL获取参数,从源获取数据,填充视图模型,填充表单(视图)。但是,当用户更改表单值时,我不想更新视图模型 - 我希望他们提交"提交"表单,它将更新URL,这将触发路由引擎......

我尝试了data-bind="textInput: MyValue",它会更新每个按键的视图模型data-bind="value: MyValue",当表单元素失去焦点data-bind="attr: {value: MyValue}"时,会更新视图模型,这对于初始绑定有用,但随后更改视图模型的值不会更新视图。

是否有任何默认绑定可以满足我的需求?还有其他方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果在knockout绑定中执行属性,则变为单向/只读。所以在下面的模型中例如:

var Person = function(data){
    var self = this;
    self.FirstName = ko.observable(data.FirstName);
    self.LastName  = ko.observable(data.LastName);
    self.FullName = ko.computed(function(){
        return self.FirstName() + " " + self.LastName()
    });
}
myData = { FirstName: "John", LastName: "Smith" }
var me = new Person(myData);

ko.applyBindings(me);

我可以简单地通过在绑定中执行它来使FirstName成为单向/只读属性:

<input data-bind="value: FirstName()">
<input data-bind="value: LastName">
<label data-bind="text: FullName"></label>

所以现在第一个输入只获取值并且无法设置它,但第二个输入将具有双向绑定并将更新LastName属性。