Javascript 顺序主干model.set覆盖model.changed属性
我肯定我误解了主干模型的目的,Javascript 顺序主干model.set覆盖model.changed属性,javascript,backbone.js,Javascript,Backbone.js,我肯定我误解了主干模型的目的,changed,changedAttributes和set属性/方法。在模型上调用两次set时,只有第二个属性包含在changed属性中。e、 g: model.set('field1', 'some diff value', {silent: true}); model.changed; // => {'field1': 'some diff value'} model.set('field2', 'some other value', {silent
changed
,changedAttributes
和set
属性/方法。在模型上调用两次set
时,只有第二个属性包含在changed
属性中。e、 g:
model.set('field1', 'some diff value', {silent: true});
model.changed; // => {'field1': 'some diff value'}
model.set('field2', 'some other value', {silent: true});
model.changed; // => {'field2': 'some other value'}
我对第二次访问changed
的期望是{'field1':'some diff value','field2':'some other value'}
我想要更改值的完整列表,以便优化与服务器的同步,否则可能会拖入许多其他大型未修改字段。目前,我正在使用自己的changed
版本进行此操作,该版本仅在模型保存到服务器后等于{}
我缺少/误解了什么
我想要更改值的完整列表,以便优化与服务器的同步,否则可能会拖入许多其他大型未修改字段
假设您使用的是版本0.9.9+,您可以将补丁
选项传递到save调用,该调用只会将更改的属性发送到服务器
从文档中:
changed属性是包含自上次设置以来已更改的所有属性的内部哈希。请不要直接更新更改,因为其状态由集合内部维护。可以从changedAttributes获取changed的副本
查看带注释的源代码,看起来唯一的方法是在传入所有更改字段和选项patch:true的模型上调用save
model.save({'field1':'some diff value','field2':'some other value'},{patch:true})
另一种选择是监听模型上的所有change
事件,并管理内部变更图;请确保在更新服务器端时刷新此映射
model.set('field1', 'some diff value', {silent: true});
model.set('field2', 'some other value', {silent: true});
model.save({patch: true}); // field1 and field2 are only attributes saved to server