在骨干视图上的this.item

时间:2014-02-24 20:58:02

标签: javascript backbone.js

我试图了解this.item来自此主干视图的位置:

Backbone.View.extend({

    initialize: function() {
        var date = new Date();
        this.date = date;
        this.month = date.getMonth();
        this.day = date.getDay();
        this.year = date.getFullYear();
        this.calendar = new calendar();
        _.bindAll(this);
    },

    showActivityItem: function(e) {
        var target = $(e.currentTarget);
        var id = target.attr("data-id");
        var item = this.item;
    }
});

item似乎是一个Backbone模型,除了它是如何被分配到item属性之外我对此很好。

当我在控制台中输出项目时,我得到:

child {cid: "c85", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
_changing: false
_events: Object
_pending: false
_previousAttributes: Object
attributes: Object
changed: Object
cid: "c85"
collection: child
__proto__: Surrogate

每个事件调用showActivityItem:

    events: {
        'click #activityList .boxEntry': 'showActivityItem'
    },

类中没有代码可以执行此操作。 item在Backbone视图中是否为Backbone模型提供了一些未记录的访问者?它不在Backbone网站上的View属性列表中。

谢谢。

1 个答案:

答案 0 :(得分:0)

在您展示的代码之外的某个地方,您的代码(可能是无意中)在视图中添加了.item属性。

var model = new ItemModel(...);

// ...

var view = new ItemView({model: model});

// ...

view.item = model;

Backbone本身没有任何内容定义名为item的属性,您可以通过搜索source code进行验证。由于您使用的是标准的Backbone事件委托(除非您没有包含某些代码),因此事件处理程序中的this将被设置为视图本身。