Backbone.js将更改事件绑定到模型内的集合
Backbone.js binding a change event to a collection inside a model
我是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 answer的一个附录,但它足够长,我需要答案格式而不是注释格式。
-
显然,OP希望在这里与
change
和add
结合,但其他人可能也希望与destroy
结合。可能还有其他事件(我还不是100%熟悉所有事件),所以绑定到all
将覆盖您的所有基础。CCD_ 7代替CCD_。请注意,删除模型时,
remove
和destroy
都会激发——首先是destroy
,然后是remove
。这会传播到集合并颠倒顺序:首先是remove
,然后是destroy
。例如model event : destroy model event : remove collection event : destroy collection event : remove
-
这篇博客文章中描述了一个具有自定义事件处理程序的gotcha。
摘要:模型级别的事件应该传播到它们的集合,但如果有东西首先处理事件并调用
event.stopPropagation
,则可以阻止。如果事件处理程序返回false
,这是event.stopPropagation(); event.preventDefault();
的jQuery快捷方式 -
在模型或集合中调用
this.bind
是指Undercore.js的绑定,NOTjQuery/Zepto的绑定。有什么区别?我注意到的最大的一个问题是,不能在一个带有空格分隔的字符串中指定多个事件。例如this.bind('event1 event2 ...', ...)
此代码查找名为
event1 event2 ...
的事件。在jQuery中,这将把回调绑定到event1
、event2
。。。如果要将一个函数绑定到多个事件,请将其绑定到all
或为每个事件调用bind
一次。github上有一个问题,所以这个问题有望改变。目前(2011年11月17日),请对此保持警惕。
- 将多级 mongodb 文档转换为 Backbone.js 模型/集合
- 主干:如何保存模型集合中模型的属性更改
- 我应该何时/为什么从 BackboneJS 模型/集合扩展函数返回
- 主干 + 木偶 - 模型/集合的内存管理最佳实践
- 为什么预期的路线不使用帆.js蓝图 API 将项目添加到模型集合
- 主干模型/集合中的Javascript范围界定问题
- 使用Knockback.js过滤中的视图模型集合
- 正在清除主干模型/集合内存泄漏
- 主干集合和模型url,批量模型集合保存
- 如何从asp.net mvc将模型集合注入backbone.js
- JavaScript:Backbone.js获取json并将其加载到模型集合中
- 如何为我的所有BackboneJS模型/集合REST调用添加一个基本URL
- 我如何检测一个对象是一个水线模型或模型集合在Sails.js
- 在嵌套的骨干(木偶)模型/集合中冒泡事件
- 骨干关系——深度嵌套模型/集合
- 如何在主干视图中加载模型集合
- 类似骨干模型/集合的React库
- 从React组件更新模型/集合
- 主干监听嵌套模型/集合
- BackboneJS模型/集合urlRoot/URL的意义