我正在使用backbonejs并在我拥有的方法中:
$.each(response.error, function(index, item) {
this.$el.find('.error').show();
});
但是,因为它位于$.each
,this.$el
未定义。
我有_.bindAll(this, 'methodName')
,它们可以在每个之外工作。所以,现在我需要绑定它吗?
任何帮助都会很棒!谢谢
答案 0 :(得分:11)
您正在使用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();
});
以下是两个Underscore方法的快速演示:http://jsfiddle.net/ambiguous/dNgEa/
答案 1 :(得分:2)
在循环之前设置局部变量:
var self = this;
$.each(response.error, function(index, item) {
self.$el.find('.error').show();
});