骨干自定义事件:获取调用者对象

时间:2011-12-22 10:07:30

标签: javascript backbone.js

只是一点点琐事; 我在循环中创建视图和模型,然后尝试将自定义事件绑定到它们。到目前为止所有的goo,但是当我想找到对象时,发生了什么。我知道还有其他更长时间的方法可以将每个事件分别分配给系列,但我想我正在寻找一种更有效的方法:

initialize: function(args)
    {
        this.views = [];
        this.models = [];
        for(var i =0;i<args.items.length;i++)
        {
            this.models[i]      = new BasicContentModel({url:args.items[i].urlRoot+args.items[i].url});
            this.views[i]       = new BasicContentView({model:this.models[i],id:i,className:"tab-"+i});
            this.views[i].bind("updated",this.update,this) //<-- heres the bind
        }
        // blah blah
    },
    update: function(args)
    {
        console.log("updating:",args) //<-- trying to get which one called the update
    }

这有意义吗?基本上我想记录哪个视图刚刚更新(向上冒泡)

2 个答案:

答案 0 :(得分:5)

对不起,我不认为我可以删除我的问题,因为缺少积分但是我刚刚在其他地方找到了答案,并且认为未来可能会有人认为这有用:

当你触发事件时,对象应作为第二个参数包含在触发器方法中,如此

来自BasicContentView

this.trigger("updated",this)

答案 1 :(得分:0)

集合是完成这类事情的最佳场所,它会是这样的:

var myCollectionView = Backbone.View.extend({

  initialize: function() {
    this.models = [];
    this.collection.add(this.models);
    this.collection.bind("add", this.addOne, this);
  }

  addOne: function(model_instance) {
    var basicContentView = new BasicContentView({model:model_instance});
    this.$('ul').append(basicContentView); // if your basicContentView is an li for example.
  }

});