7

Ich richte eine verschachtelte Kategorien Struktur im Backbone mit RequireJS.Circular Dependency in Backbone/RequireJS geschachtelte Liste

In dieser Struktur enthält eine categories-Auflistung Kategoriemodelle und ein einzelnes Kategoriemodell kann eine categories-Auflistung enthalten.

Leider scheint dies das gefürchtete zirkuläre Abhängigkeitsproblem in RequireJS zu verursachen. Ich habe die Dokumente zu RequireJS gelesen (http://requirejs.org/docs/api.html#circular), aber ich finde die Erklärung mit "a" und "b" verwirrend.

Hier ist mein Code, der das Problem verursacht:

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; 

}); 

Ich frage mich, ob jemand, der vor dieser mich in die richtige Richtung lenken helfen kann, erfahren hat, .

Dank (im Voraus) für Ihre Hilfe,

Antwort

11

Sie müssen nur require die Sammlung wieder verwenden, wenn Sie es im Modell benötigen, wie die Sammlung Gang zunächst nicht definiert werden kann:

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; 

}); 

Im Beispiel sie auch require importieren, aber es sollte auch funktionieren, ohne der Import.

+0

Funktioniert gut, danke – user1031947

+0

Mann - Ich habe versucht, ein Circ-Abhängigkeitsproblem in einem meiner Projekte herauszufinden, und das hat mir wirklich geholfen - danke Trauben. – Stevus

+0

Dies kann Probleme verursachen, da das Laden der Sammlung beim zweiten Mal asynchron sein kann? –

0

Dazu Sie ein Plugin zu verwenden, wie Backbone Relational in Betracht ziehen sollten.

+0

Danke, ich habe mir Backbone relational angesehen. Ich habe das Gefühl, dass es für eine einfache verschachtelte Liste, die alles ist, was ich brauche, etwas übertrieben ist. – user1031947