backbone.js中的双向数据绑定

我正在开发一个jQuery Backbone.js Web应用程序.
在Adobe Flex中,我已经在我的应用程序中实现了2路数据绑定
输入元素/小部件.
因此,每个输入元素/窗口小部件都知道其对应的模型和模型属性名称.
用户点击标签或输入时,字段值将自动提供给模型.
container.model.set(this.attrName,this.value,options); // command 1

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

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

问题是:
用户点击enter并且模型被自动更新时,“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,options);

更新:
你为你的问题添加一个新的评论,所以我补充了我的答案来解决你提到的新的用例(验证流程):

var ExtendedModel = Backbone.Model.extend({
    uiChange : false,uiSet: function (attributes,options,optional) {
        this.uiChange = true;
        this.set(attributes,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'});

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...