我在Javascript中有一个代码:
_.each(this.collection.models, function (student) {
$(this.el).append(new StudCloneItemView({ model: student }).el);
}, this);
我在coffescript中写这篇文章为
_.each this.collection.models , (student) =>
$(@el).append new Item ({ model:student }).el
生成
_.each(this.collection.models, function(student) {
return $(_this.el).append(new Item({
model: student
}.el));
});
根据我的要求,这是不可取的。生成的javascript中缺少“this”元素的最后一段。这很重要。
如何使用我为_.each提到的coffeescript生成顶部提到的javascript?
反正有吗?或者我错过了任何语法?
答案 0 :(得分:1)
_.each @collection.models, ((student) ->
$(@el).append new StudCloneItemView(model: student).el
), this
答案 1 :(得分:1)
您的JavaScript:
_.each(this.collection.models, function (student) {
$(this.el).append(new StudCloneItemView({ model: student }).el);
}, this);
以及=>
CoffeeScript产生的内容:
var _this = this; // This is somewhere above your _.each in the generated JS
_.each(this.collection.models, function(student) {
return $(_this.el).append(new Item({
model: student
}.el));
});
功能相同。您不需要_.each
的上下文参数,因为=>
会生成回调中使用的this
(称为_this
)的别名。
顺便说一句,Backbone集合有various Underscore methods mixed in,所以你不必说_.each(@collection.models, ...)
,你可以直接在集合上使用each
:
@collection.each (student) =>
@$el.append(new StudCloneItemView(model: student).el)
我也切换到你的视图已经预先构建的$el
,没有必要在每次迭代时构建一个新的jQuery对象。