Backbone.js将更改事件绑定到模型内部的集合

问题描述

| 我对Backbone还是很陌生,所以如果这个问题有点明显,请原谅。 我在模型内部的集合中遇到问题。集合更改时,它不会注册为模型更改(并且不会保存)。 我已经像这样建立了我的模型:
var Article = Backbone.Model.extend({

   defaults: {
       \"emsID\" :  $(\'html\').attr(\'id\')
   },initialize: function() { 
       this.tags = new App.Collections.Tags();
   },url: \'/editorial_dev.php/api/1/article/persist.json\'
});
如果我更新标签集合并手动保存模型,则效果很好:
this.model.tags.add({p : \"a\"});

this.model.save();
但是,如果未保存模型,则视图不会注意到更改。谁能看到我在做什么错?     

解决方法

initialize: function() { 
    this.tags = new App.Collections.Tags();
    var model = this;
    this.tags.bind(\"change\",function() {
        model.save();
    });
},
绑定到内部集合上的
change
事件,只需在外部模型上手动调用
.save
。     ,这实际上是@Raynos答案的附录,但是它足够长,我需要答案格式而不是注释格式。 显然,OP希望在此处绑定到
change
和ѭ6but,但是其他人也可能希望绑定到
destroy
。可能还有其他事件(我还不是100%熟悉所有事件),因此绑定到
all
会覆盖您的所有基础。
remove
也可以代替
destroy
工作。请注意,删除模型时,ѭ9和ѭ7都会触发,首先是ѭ7,然后是ѭ9。这会传播到集合并颠倒顺序:先是
remove
,然后是
destroy
。例如。
model event      :      destroy
model event      :      remove
collection event :      destroy
collection event :      remove
在此博客文章中描述了一个带有自定义事件处理程序的陷阱。 简介:模型级事件应传播到其集合,但是如果某些事物首先处理该事件并调用
event.stopPropagation
,则可以避免该事件。如果事件处理程序返回
false
,则这是
event.stopPropagation();
event.preventDefault();
的jQuery快捷方式 在模型或集合中调用“ 21”是指Underscore.js的绑定,而不是jQuery / Zepto的绑定。有什么不同?我注意到的最大问题是,您不能在单个字符串中使用空格分隔来指定多个事件。例如。
this.bind(\'event1 event2 ...\',...)
该代码查找名为
event1 event2 ...
的事件。在jQuery中,这会将回调绑定到
event1
event2
,...。如果要将函数绑定到多个事件,请将其绑定到
all
或为每个事件调用一次
bind
。在github上有一个与此相关的问题,所以这个问题有望改变。目前(2011年11月17日),请注意这一点。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...