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
Backbone.js 在包含子模型的模型上调用集合_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 在包含子模型的模型上调用集合

Backbone.js 在包含子模型的模型上调用集合,backbone.js,coffeescript,Backbone.js,Coffeescript,我有一个主干模型,包含在模型的“parse”方法中初始化的子模型,例如: parse: (response,options) -> attrs = super if attrs.child attrs.child = new Child( attrs.child ) 每当我使用同一类型模型的不同实例对父模型调用“set”时,即使父模型或子模型中没有任何更改,也始终会触发“change”事件。请参见此处的fiddle演示: 主干中set()方法的代码似乎正在使用下划线isE

我有一个主干模型,包含在模型的“parse”方法中初始化的子模型,例如:

parse: (response,options) ->
  attrs = super
  if attrs.child
    attrs.child = new Child( attrs.child )
每当我使用同一类型模型的不同实例对父模型调用“set”时,即使父模型或子模型中没有任何更改,也始终会触发“change”事件。请参见此处的fiddle演示:

主干中set()方法的代码似乎正在使用下划线isEqual方法来检测属性是否已更改:

if (!_.isEqual(current[attr], val)) changes.push(attr);
在属性为主干模型的情况下,即使子模型的属性相同,isEqual方法也将始终返回false。如果项是模型,那么对isEqual的调用不应该传递模型的属性吗?i、 例如:

currrentAttr = if( current[attr] is Backbone.Model ) then current[attr].attributes else current[attr]
newAttr = if( val is Backbone.Model ) then val.attributes else val
if (!_.isEqual(current[attr], val)) changes.push(attr);
总之,当一个模型被设置在另一个模型上并且两个模型的所有属性都相等时,我试图防止触发更改事件


谢谢你的帮助

您应该能够在set上传递一个附加参数{silent:true},以防止触发更改?@Evan我希望触发更改,但仅针对实际已更改的属性。在父模型上调用“set”时,即使所有子模型属性都不不同,子模型始终被检测为“已更改”。