将您的绑定移动到initialize
最好,但假设您有充分的理由不这样做,您可以设置一个标志:
initialize: function() {
var _this = this;
this._finish_initializing = _.once(function($options) {
_this.collection.on('reset', function() {
_this.render($options);
});
});
//...
},
render: function($options) {
this._finish_initializing($options);
//...
}
有很多不同的方法来实现标志,_.once
只是很好地隐藏了标志检查。render
您还可以在有一个解除绑定的侦听器时触发一个事件:
initialize: function() {
var finish_initializing = function($options) {
/* your binding goes here ... */
this.off('render', finish_initializing);
};
this.on('render', finish_initializing, this);
},
render: function($options) {
this.trigger('render', $options);
//...
}
这其实是同一个逻辑,只是穿了不同的衣服。您还可以使用显式标志和if
inrender
或将函数分配给this._finish
ininitialize
并且该函数将delete this._finish
.