我正在使用backbonejs,并且在我拥有的方法中:
$.each(response.error, function(index, item) {
this.$el.find('.error').show();
});
但是,因为它在$.each
,this.$el
中是未定义的。
我有_.bindAll(this, 'methodName')
哪些将在每个之外工作。那么,现在我需要将它绑定在里面吗?
任何帮助都会很棒!谢谢
我正在使用backbonejs,并且在我拥有的方法中:
$.each(response.error, function(index, item) {
this.$el.find('.error').show();
});
但是,因为它在$.each
,this.$el
中是未定义的。
我有_.bindAll(this, 'methodName')
哪些将在每个之外工作。那么,现在我需要将它绑定在里面吗?
任何帮助都会很棒!谢谢
您正在使用 Backbone,因此您有下划线,这意味着您有_.each
:
每个
_.each(list, iterator, [context])
迭代一个元素列表,依次将每个元素生成一个迭代器函数。如果传递了一个,则迭代器绑定到上下文对象。
所以你可以这样做:
_.each(response.error, function(item, index) {
this.$el.find('.error').show();
}, this);
或者你可以使用_.bind
:
$.each(response.error, _.bind(function(index, item) {
this.$el.find('.error').show();
}, this));
或者,因为你一遍又一遍地发现同样的事情,预先计算并停止关心this
:
var $error = this.$el.find('.error');
$.each(response.error, function(index, item) {
$error.show();
});
这是两种下划线方法的快速演示:http: //jsfiddle.net/ambiguous/dNgEa/
在循环之前设置一个局部变量:
var self = this;
$.each(response.error, function(index, item) {
self.$el.find('.error').show();
});