7

我在Requirebone主幹中設置了一個嵌套類別結構。Backbone/RequireJS嵌套列表中的循環依賴關係

在此結構中,類別集合包含類別模型,而單個類別模型可以包含類別集合。

不幸的是,這似乎導致了RequireJS中可怕的循環依賴問題。我已閱讀有關RequireJS(http://requirejs.org/docs/api.html#circular)的文檔,但是我找到了解釋'a'和'b'的混淆。

這裏是我的代碼,這是導致該問題:

define([ 

    "jquery", 
    "underscore", 
    "backbone", 
    "collections/categories" 

    ], function($, _, Backbone, CategoriesCollection) { 

    var Category = Backbone.Model.extend({ 

     defaults: { 
      title: "Untitled" 
     }, 

     parse: function(data) { 
      this.children = new CategoriesCollection(data.children, {parse: true}); 
      return _.omit(data, "children"); 
     } 

    }); 

    return Category; 

}); 

...

define([ 

    "jquery", 
    "underscore", 
    "backbone", 
    "models/category" 

    ], function($, _, Backbone, CategoryModel) { 

    var Categories = Backbone.Collection.extend({ 
     model: CategoryModel 
    }); 

    return Categories; 

}); 

我想知道如果任何人誰經歷過這可以幫助引導我朝着正確的方向。

感謝(提前)的幫助,

回答

11

你只需要當你需要它的模型,集合傳球最初可以是不確定的再次使用require集合:

define([ 

    "jquery", 
    "underscore", 
    "backbone", 
    "collections/categories" 

    ], function($, _, Backbone, CategoriesCollection) { 

    var Category = Backbone.Model.extend({ 

     defaults: { 
      title: "Untitled" 
     }, 

     parse: function(data) { 
      if(!CategoriesCollection){ 
       CategoriesCollection = require("collections/categories"); 
      } 

      this.children = new CategoriesCollection(data.children, {parse: true}); 
      return _.omit(data, "children"); 
     } 

    }); 

    return Category; 

}); 

在他們還進口require的例子,但它也應該不工作進口。

+0

工程很好,謝謝 – user1031947

+0

男人 - 我一直在試圖找出我的一個項目中的依賴項問題,這真的幫了我很多 - 謝謝一堆。 – Stevus

+0

這可能會導致問題,因爲第二次加載集合可能是異步? –

0

爲此,您應該考慮使用插件像Backbone Relational

+0

謝謝,我確實看過Backbone Relational。我有一種感覺,對於一個簡單的嵌套列表,這是我所需要的,這有點矯枉過正。 – user1031947