使用Knockout,是否可以设置单向绑定,以便更改视图模型将更新视图,但更新视图不会更新视图模型?
我使用路由引擎从URL获取参数,从源获取数据,填充视图模型,填充表单(视图)。但是,当用户更改表单值时,我不想更新视图模型 - 我希望他们提交"提交"表单,它将更新URL,这将触发路由引擎......
我尝试了data-bind="textInput: MyValue"
,它会更新每个按键的视图模型data-bind="value: MyValue"
,当表单元素失去焦点data-bind="attr: {value: MyValue}"
时,会更新视图模型,这对于初始绑定有用,但随后更改视图模型的值不会更新视图。
是否有任何默认绑定可以满足我的需求?还有其他方法吗?
谢谢!
答案 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属性。