Backbone.js 主干视图el未附加
我有以下主干(在coffeescript中)视图,其中我传递一个数组并尝试将每个项附加到el。然而,我总是想出一个空的elBackbone.js 主干视图el未附加,backbone.js,coffeescript,Backbone.js,Coffeescript,我有以下主干(在coffeescript中)视图,其中我传递一个数组并尝试将每个项附加到el。然而,我总是想出一个空的el ItemTagList = Backbone.View.extend className : "itemTagsContainer" initialize : (tags) -> this.render(tags.taglist) render: (taglist) -> taglist.forEach (tag) ->
ItemTagList = Backbone.View.extend
className : "itemTagsContainer"
initialize : (tags) ->
this.render(tags.taglist)
render: (taglist) ->
taglist.forEach (tag) ->
tag_span = _.template($("#tag").html(), {tag : tag} )
$(this.el).append(tag_span)
console.log(tag)
模板$(“#标记”)
如下所示:
<a class='tag' href="/items?tagged_with=<%= tag =>"><%= tag =></a>
我总是得到空的el
,即
<div class="itemTagsContainer"></div>
而不是
<div class="itemTagsContainer">
<a class='tag' href="/items?tagged_with=Tag1">Tag1</a>
<a class='tag' href="/items?tagged_with=Tag2">Tag2</a>
</div>
这就是我希望得到的
有人能帮忙吗?您的回调函数中有一个上下文问题;
@
(又称this
)将是全局对象(浏览器中的窗口
),因此this.el
不是您所认为的那样。您可以在定义回调函数时使用以下方法来解决此问题:
render: (taglist) ->
taglist.forEach (tag) =>
tag_span = _.template($("#tag").html(), tag: tag)
@$el.append(tag_span)
console.log(tag)
我也切换到了,因为您的视图已经有了$(@el)
的缓存版本
forEach
回调中的上下文取决于您所处的模式:
如果将thisArg
参数提供给forEach
,它将用作每次回调调用的this值,就像调用了callback.call(thisArg,元素,索引,数组)
一样。如果thisArg
为undefined
或null
,则函数中的此值取决于函数是否处于严格模式(如果处于严格模式,则为传递值;如果处于非严格模式,则为全局对象)
我建议使用=>
,这样你就不用担心了;或者,您可以使用thisArg
:
taglist.forEach (tag) -> ...., @
但这在咖啡剧本中往往有点难看和麻烦。Wow!我只是工作!我彻夜未眠,想找出问题所在。谢谢你指出解决办法。我真的需要对咖啡脚本和javascript有更多的了解。@DannyClay:不客气。获取@
(又称this
)的正确值可能是最常见的(Coffee|Java)脚本问题。你经常会看到var\u this=this代码>,var=this代码>,或var self=this在JavaScript中,您可以使用\u this
、that
或self
来代替this
。
taglist.forEach (tag) -> ...., @