Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 顺序主干model.set覆盖model.changed属性_Javascript_Backbone.js - Fatal编程技术网

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