gpt4 book ai didi

backbone.js - backbone.js 中的两种方式数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 17:28:25 25 4
gpt4 key购买 nike

我正在开发一个 jQuery Backbone.js Web 应用程序。
正如在 Adob​​e Flex 中一样,我在我的应用程序中实现了 2 路数据绑定(bind)输入元素/小部件。因此,每个输入元素/小部件都知道其相应的模型和模型属性名称。
当用户点击 Tab 或 Enter 时,字段值会自动赋予模型。

container.model.set(this.attrName, this.value, options); // command 1

另一方面,当模型从后端更新时, View 输入元素/小部件应该自动获取 更新:

container.model.bind("change:"+ this.attrName, this.updateView, this); // command 2

问题是:
当用户按回车键并且模型自动更新时,“change:abc”也是触发并调用 this.updateView ,不仅当新模型来自后端。

到目前为止,我的解决方案是在用户按下 Enter 键(命令 1)时设置模型值时传递选项“source: gui”,并在我的 updateView 方法中检查该选项。但我不再满足于这个解决方案。

有人有更好的解决方案吗?提前非常感谢
沃尔夫冈

更新:
当传递选项silent: true时,不会调用模型的validate方法,因此那没有帮助。请参阅 Backbone.js 源代码 0.9.2:

_validate: function(attrs, options) {
if (options.silent || !this.validate) return true;

最佳答案

来自 Backbone.js 站点:

A "change" event will be triggered, unless {silent: true} is passed as an option

options.silent = true;
container.model.set(this.attrName, this.value, options);

更新:您在问题中添加了新评论,因此我只是补充了我的答案以修复您提到的新用例(验证流程):

var ExtendedModel = Backbone.Model.extend({
uiChange : false,
uiSet: function (attributes, options, optional) {
this.uiChange = true;
this.set(attributes, options, optional);
this.uiChange = false;
}
});

var MyModel = ExtendedModel.extend({
});

var model = new MyModel();
model.on('change:name', function(){
console.log('this.uiChange: ', this.uiChange);
});

//simulates the server side set
model.set({name:'hello'});

//simulates the ui side set you must use it to set from UI
model.uiSet({name:'hello2'});

关于backbone.js - backbone.js 中的两种方式数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com