2012-01-20 13 views
1

私は、ネストされたメニューを含めるBrunchとBackbone.jsを使ってアプリケーションを構築しています。 MenuItemModelとMenuItemsCollectionを作成しました。両方とも、対応するバックボーンベースオブジェクトを拡張しています。Backbone.jsのネストされたビューで循環依存関係を解決する方法

さらに、MenuItemView(個々のアイテム用)とMenuItemsView(アイテムのコレクション用)があります。

class MenuItemView extends Backbone.View 
    tagName: 'li' 

    initialize: (options) -> 
     if @model.get('children')? 
      childCollection = new MenuItemList 
      childView = new MenuItemsView 
       el: $('<ul>').appendTo @el 
       collection: childCollection 

class exports.MenuItemsView extends Backbone.View 
    initialize: (options) => 
     @collection.bind 'add', @add 

    add: => 
     view = new MenuItemView { model: @collection.last() } 

あなたが見ることができるように、そこに二つのビュー間の循環依存関係だ、といない完全に予想外に、「キャッチされないにReferenceErrorでライン「childView =新MenuItemsView」結果:MenuItemsViewストリップダウン、彼らはこのように見えます私のJSコンソールでは定義されていません "。

私の質問は、これを解決する方法があるかどうかです。後でコード内で再帰関数を使用してネストされたメニューを作成することはできますが、これは私が望むようにきれいで自蔵的ではないようです。さらに、私は上記のコードのようにネストされたビューを使用することをSOFで提案する次の2つのインスタンスを見つけました。私は間違って何をしていますか?

https://stackoverflow.com/a/6476507

Nesting Views within Views in backbone js

+0

'class exports.MenuItemsView extends Backbone.View'の代わりに' MenuItemsView extends Backbone.View'を試しましたか? – Atinux

答えて

1

あなたがMenuItemViewのクラス定義内MenuItemsViewを使用していないので、何の問題があってはなりません。あなたは、輸出の名前空間にMenuItemsViewを置くように見えますが、initializeは、独自のローカルな名前空間内MenuItemsViewと呼ばれるクラスを探している

childView = new exports.MenuItemsView 

:へ

childView = new MenuItemsView 

を変更してみてください。

関連する問題