2012-01-20 40 views
1

我正在使用Brunch和Backbone.js構建應用程序,該應用程序包含嵌套菜單。我創建了一個MenuItemModel和一個MenuItemsCollection,它們都擴展了相應的Backbone-base-objects。如何在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() } 

正如你所看到的,有兩種觀點之間的循環依賴,而不是完全出乎意料的是,該行「childView =新MenuItemsView」的結果是「未捕獲的ReferenceError:MenuItemsView沒有定義「在我的JS控制檯中。

我的問題是是否有任何方法可以解決這個問題?我可以在後面的代碼中通過遞歸函數創建嵌套菜單,但這看起來並不像我想的那樣整齊和獨立。另外,我在SOF上發現了以下兩個實例,其中人們建議使用完全像上面代碼中一樣的嵌套視圖。我究竟做錯了什麼?

https://stackoverflow.com/a/6476507

Nesting Views within Views in backbone js

+0

你有沒有嘗試'類MenuItemsView擴展Backbone.View'而不是'類exports.MenuItemsView擴展Backbone.View'? – Atinux

回答

1

既然你不是MenuItemView類定義中使用MenuItemsView,不應該有任何問題。嘗試改變

childView = new MenuItemsView 

要:

childView = new exports.MenuItemsView 

看起來你把MenuItemsView到出口的命名空間,但initialize正在尋找自己的本地命名空間中調用MenuItemsView類。