gpt4 book ai didi

javascript - 如何获取主干中的事件类型?

转载 作者:行者123 更新时间:2023-12-02 19:12:31 24 4
gpt4 key购买 nike

在主干中收集和查看

var studentmodel = Backbone.Model.extend();

var studentcollection = Backbone.Collection.extend({
model : studentmodel,
url : 'http://localhost/bb/data.JSON',
parse : function(response){
//console.log(response.data);
return response.data;
//return response;
},
});



var studentlistview = Backbone.View.extend({
tagName : "ul",
className : "studentlistul",
initialize : function(){
this.model.bind("reset", this.checkEvent,this);
this.model.bind("add", this.checkEvent,this);
},
checkEvent : function(){

$(this.el).html("");

_.each(this.model.models, function(student){

$(this.el).append(new studentListItemView({ model : student}).render2().el);
}, this);

$('#studentlistdiv').html($(this.el));

return this;

} });

并尝试向该模型及其工作添加项目,我的问题是,在 render fn 内部,当 this.model.bind("add", this.checkEvent,this) 此 evt 触发时,如何获取事件类型。在 checkEvent 中,我如何获取事件的类型,即哪个事件触发了添加或重置。这是我的问题请帮助我

最佳答案

Backbone 事件处理程序没有可靠的方法来了解什么事件触发了它。而不是这样做:

this.model.bind("reset", this.checkEvent, this);
this.model.bind("add", this.checkEvent, this);

对于每个所需的操作,您应该有单独的处理程序:

// A reset generally means that you want to redraw the whole thing.
this.model.bind("reset", this.render, this);

// If one model is added then you usually just want to render the
// the new one.
this.model.bind("add", this.render_one, this);

然后你的渲染看起来有点像这样:

this.$el.empty();
this.collection.each(this.render_one, this);
return this;

我在这里的时候还有一些额外的事情:

  1. Backbone View 已在 this.$el 中拥有其 this.el 的 jQuery 版本因此不需要 $(this.el),只需使用 this.$el
  2. 主干 View 处理 collection option他们处理模型的方式相同。因此,如果您new View({ collection: c }),那么 View 将自动具有this.collection。如果您有集合,请使用 collection;如果您有模型,请使用 model;使用准确的名称可以减少困惑。
  3. 主干集合有一堆 Underscore methods already mixed in所以你可以说 this.collection.each(...) 而不是 _(this.collection.models, ...)

关于javascript - 如何获取主干中的事件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13525362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com