Javascript BackboneJS从初始加载添加捕获事件
我正在创建一个集合,但没有使用fetch(),但JSON数据已经可用Javascript BackboneJS从初始加载添加捕获事件,javascript,backbone.js,backbone-events,backbone-relational,Javascript,Backbone.js,Backbone Events,Backbone Relational,我正在创建一个集合,但没有使用fetch(),但JSON数据已经可用 this.displays = new Displays(jQuery.parseJSON($('#temp_json').html())); 我需要为该集合的每个模型设置一个“位置”值,该值应为该模型在此集合中的位置 我要做的是捕获一个事件,在初始加载中,每个模型都是从JSON构建的,并添加到集合中 然后,我将制作如下内容: theModel.set('position', this.length); 不幸的是,我找不到
this.displays = new Displays(jQuery.parseJSON($('#temp_json').html()));
我需要为该集合的每个模型设置一个“位置”值,该值应为该模型在此集合中的位置
我要做的是捕获一个事件,在初始加载中,每个模型都是从JSON构建的,并添加到集合中
然后,我将制作如下内容:
theModel.set('position', this.length);
不幸的是,我找不到应该将我的收藏绑定到的事件。
此外,此集合的模型还包含其他集合(…),应该在这些集合中执行相同的操作
这可能看起来很奇怪,但我必须这样做,因为在我看来,稍后我将讨论以下内容:
var prototypeNames = [this.model.get('display').get('position'), this.model.get('position')];
希望这足够清楚。
谢谢 Collection.add-函数触发一个
add
-事件,您可以使用on
-函数收听该事件。事件将添加的模型和包含一些有用属性(如添加模型的索引)的选项对象作为参数传递。()
所以你可以这样做:
collection.on('add', function(model, options) {
model.set('position', options.index);
});
如果您想了解有关add
-事件传递的参数的更多信息,只需记录它们,因为现有文档充其量也不多
collection.on('add', function(model, options) {
console.log(options);
});
希望这有帮助 适合我的解决方案: 我使用了BackbonRelational,这在处理实际的模型关系时非常棒。 我正在听“relational:add”,它在构建集合时为集合的每个项触发 然后,我在我的项目上设置一些值,并触发一个新的事件“postAdd”,可以从我的视图中听到它
window.Displays = Backbone.Collection.extend({
model: Display,
initialize: function(data, options){
this.on("relational:add", function(relModel){
relModel.set('pos',this.indexOf(relModel));
this.trigger('postAdd', relModel);
}, this);
},
});
您可以覆盖集合的默认“添加”实现,以触发一个自定义事件,该事件不会被主干网静音
var MyCollection = Backbone.Collection.extend({
// Override the default 'add' implementation...
add: function( models, options ) {
// Call the default implementation first...
Backbone.Collection.prototype.add.apply( this, arguments );
// Fire our custom events on the models...
while (model = models.shift()) {
model.trigger('customAdd', model, this, options);
}
return this;
}
});
现在,您可以收听在模型上触发的“customAdd”事件。当静默=真时,此事件将始终被触发
因此,当添加带有{silent:false}的项时,将触发两个事件:“add”和“customAdd”
我使用这种技术在新集合初始加载并创建所有模型时触发事件。由于initialize方法将在创建模型之前调用,因此我需要重写“reset”函数,以在创建模型时触发要执行的代码。如果我没有弄错,则在构建集合时,如果集合包含多个项,则不会触发此事件。所以onLoad这不是我所需要的触发。