0

嗨,我遇到了骨干 js 的问题

我有评论视图

class window.CommentView extends Backbone.View
  el: $('.comment')
  initialize: ->
    @$el.show()
  events:
    "click": "renderCommentBoxView"

  renderCommentBoxView: ->
    @commentBoxView = new CommentBoxView
      id: this.$('.comment')['context']['activeElement']['id']
      model: new Item
      el: @el

和评论框视图

 class window.CommentBoxView extends Backbone.View
   el: $('.commentBoxMain')

   events:
     "click.comment": "showCommentBox"
     "click document": "stopEvent"
     "click .login_button": "submitComment"
   initialize: ->
     @showCommentBox()

   stopEvent: (event) ->
     event.stopPropagation()

  showCommentBox: ->
     $(@el).append('<textarea class=\'commentBox\'></textarea><br/><input type=\'button\' class=\'login_button\' name=\'Add a comment\' value=\'Add a comment\'><span class=\'loading\' style=\'display: none;\'>Loading...</span>')

现在,用户可以评论多个项目。因此,每当单击评论按钮时,我都会呈现一个名为 CommentBoxView 的新视图,用于定义元素和模型

问题是我无法获取视图应绑定到的当前单击元素。

我的示例 HTML 如下所示:

   <div id="item_1">
     <a class="comment" href='javascript:void(0)'>Comment</a>
     <div class="commentMainBox"></div>
   </div>
  <div id="item_2">
    <a class="comment" href='javascript:void(0)'>Comment</a>
    <div class="commentMainBox"></div>
  </div>

每当单击评论链接时,我都会构建html并转储到commentMainBox中。但问题是单击的元素始终是我页面上带有类注释的第一个元素。如何获取当前单击的元素,以便在正确的 div 中呈现内容。

CommentBoxView 的元素也应该是el: $('.commentBoxMain'),但是如果我分配它,那么我不会在视图中呈现任何内容,但是当我初始化为 时el: $('.comment'),我会看到评论框,但是无论单击哪个评论,它总是在第一个评论下呈现。

我哪里错了?

4

1 回答 1

1

您不应该@el从它实例化的CommentViewto传递;在课堂上CommentBoxView声明也不起作用。正如 Backbone.js 文档所说:el: $('.commentBoxMain')CommentBoxView

如果您想创建一个引用 DOM 中已有元素的视图,请将元素作为选项传入:new View({el: existingElement})

否则,View尝试创建一个新元素。所以你想做的是:

@commentBoxView = new CommentBoxView
  model: new Item
  el: @$('.commentMainBox')

这将找到commentMainBox位于 Comment 视图中的元素(因为@$在其元素范围内)并将其作为CommentBoxView' 元素提供。

于 2012-04-08T00:29:55.243 回答