7

Sto configurando una struttura di categorie nidificate in Backbone con RequireJS.Dipendenza circolare nell'elenco backbone/RequireJS nidificato

In questa struttura, una raccolta di categorie contiene modelli di categorie e un singolo modello di categoria può contenere una raccolta di categorie.

Sfortunatamente questo sembra causare il temuto problema di dipendenze circolari in RequireJS. Ho letto i documenti su RequireJS (http://requirejs.org/docs/api.html#circular) tuttavia trovo la spiegazione con 'a' e 'b' confusi.

Ecco il mio codice, che sta causando il problema:

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; 

}); 

Mi chiedo se qualcuno che ha sperimentato prima può aiutarmi a orientare nella giusta direzione .

Grazie (in anticipo) per il vostro aiuto,

risposta

11

Hai solo bisogno di utilizzare require la raccolta di nuovo quando ne avete bisogno nel modello, come il passare Collezione inizialmente può essere indefinito:

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; 

}); 

Nell'esempio che importano anche require ma dovrebbe funzionare anche senza l'importazione.

+0

Funziona alla grande, grazie – user1031947

+0

Man - Ho cercato di capire un problema di dipendenza circ in uno dei miei progetti e questo mi ha davvero aiutato - grazie grappoli. – Stevus

+0

Ciò potrebbe causare problemi poiché il caricamento della raccolta per la seconda volta potrebbe essere asincrono? –

0

Per questo si dovrebbe prendere in considerazione di utilizzare un plugin come Backbone Relational.

+0

Grazie, ho dato un'occhiata a Backbone Relational. Ho la sensazione che per un semplice elenco annidato, che è tutto ciò di cui ho bisogno, è un po 'eccessivo. – user1031947

Problemi correlati