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

と A コメント ボックス ビュー

 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からCommentViewに渡すべきではありません。クラスCommentBoxViewで宣言el: $('.commentBoxMain')することも機能しません。CommentBoxViewBackbone.js のドキュメントにあるように:

DOM に既に存在する要素を参照するビューを作成する場合は、その要素をオプションとして渡します。new View({el: existingElement})

それ以外の場合、 はView新しい要素を作成しようとします。だからあなたがしたいことは次のとおりです:

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

commentMainBoxこれにより、コメント ビュー内にある要素が検索され (@$スコープはその要素内にあるため)、それがCommentBoxViewの要素として提供されます。

于 2012-04-08T00:29:55.243 に答える