在骨干模型中,是否可以在初始化函数中触发嵌套视图中的事件?我根据此示例创建了当前代码:https://stackoverflow.com/a/8523075/2345124并更新了主干1.0.0。这是我的初始化函数,对于Model:
var Edit = Backbone.Model.extend({
initialize: function() {
this.trigger('marquee:add');
this.on('change', function(){
this.trigger('marquee:add');
});
}
...
}
我正在尝试在模型初始化时调用方法renderMarquee:
var EditRow = Backbone.View.extend({
initialize: function() {
this.listenTo(this.model, "change", this.render); // works
this.listenTo(this.model, "marquee:add", this.renderMarquee); // only called when changed, but not when initially created
...
}
在更改模型时调用renderMarquee IS ,但在初始化时不调用。 'change'事件按预期工作(this.render被调用)。有什么想法吗?
谢谢!
答案 0 :(得分:1)
我目前面临类似的问题。我需要在模型的initialize方法中触发change事件。 我查看了骨干代码,揭示了为什么没有发生这种情况:
var Model = Backbone.Model = function(attributes, options) {
...
this.set(attrs, options);
this.changed = {};
this.initialize.apply(this, arguments);
};
在set
和initialize
清空之前执行this.change
,将模型状态设置为“没有任何变化”。
为了覆盖行为,我将以下代码添加到初始化方法中。
initialize: function(attributes, options) {
...
this.changed = attributes;
this.trigger('change');
for (attr_name in attributes) {
this.trigger('change:' + attr_name);
}
},
我手动触发所有更改事件,这对我很重要,因为继承模型可能会绑定到change
或change:attrxy
。但这还不够,因为如果我只是触发事件,changedAttributes()
方法将返回false
,因此我还将this.changed
设置为当前属性。
答案 1 :(得分:0)
这没有多大意义,因为您在进行view.listenTo
调用之前正在初始化模型。不幸的是,你真的没有选择。
您可能希望将事件处理移至已经内置事件的Backbone.Collection
,您可以收听这些事件以进行添加/删除。