Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干视图el未附加_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 主干视图el未附加

Backbone.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) ->

我有以下主干(在coffeescript中)视图,其中我传递一个数组并尝试将每个项附加到el。然而,我总是想出一个空的el

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\u this
that
self
来代替
this
taglist.forEach (tag) -> ...., @