我在处理主干和绑定事件时遇到了一个奇怪的问题。我会看看我是否可以清楚地解释它(这是一个裁剪的例子......)
在一个视图中,我在初始化方法中有以下代码
var MyView = Backbone.View.extend({
initialize: function(options) {
//[...]
this.items = [];
this.collection.on('reset', this.updateItems, this);
this.fetched = false;
},
render: function() {
if (!this.fetched) {
this.collection.fetch(); // fetch the collection and fire updateItems
return this;
}
this.$el = $('#my-element');
this.$el.html(this.template(this.items));
},
updateItems: function() {
this.fetched = true;
this.loadItems();
this.render(); // call render with the items array ready to be displayed
}
}
这个想法是我必须获取集合,处理项目 ( this.loadItems
),然后设置this.$el
.
我面临的问题是,在里面updateItems
,我看不到绑定后添加的任何属性(this.collection.on
...)
似乎绑定是针对视图的冻结版本完成的。我尝试添加属性来测试它,但是在内部updateItems
(如果被集合重置事件触发,则在内部渲染)我看不到添加的属性。
我在获取它之前解决了它绑定集合的问题,如下所示:
render: function() {
if (!this.fetched) {
this.collection.on('reset', this.updateItems, this);
this.collection.fetch();
return this;
}
但这是一种奇怪的行为。似乎在绑定时,会生成“this”的副本,而不是引用。
我对吗?还是我做错了什么?