0

骨干中的收集和查看

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) this evt 触发时获取事件类型。在 checkEvent 中,我如何获取事件的类型,即触发添加或重置的事件类型。这是我的问题请帮助我

4

1 回答 1

2

没有可靠的方法让 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);

然后你render会看起来像这样:

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

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

  1. Backbone 视图已经有一个 jQuery 版本的this.elinthis.$el所以没有必要$(this.el),只需使用this.$el.
  2. Backbone 视图处理collection选项的方式与它们处理选项的方式相同model。所以如果你new View({ collection: c })那么视图将自动拥有this.collection. 如果您有收藏,请使用collection;如果您有模型,请使用model;使用准确的名称不会造成混淆。
  3. Backbone 集合已经混合了一堆Underscore 方法,所以你可以说this.collection.each(...)而不是_(this.collection.models, ...).
于 2012-11-23T17:34:57.677 回答