7

Tôi đang thiết lập cấu trúc danh mục lồng nhau trong Backbone với RequireJS.Phụ thuộc tròn trong Backbone/RequireJS Danh sách lồng nhau

Trong cấu trúc này, bộ sưu tập danh mục chứa mô hình danh mục và mô hình danh mục đơn lẻ có thể chứa bộ sưu tập danh mục.

Thật không may điều này dường như gây ra vấn đề phụ thuộc vòng tròn đáng sợ trong RequireJS. Tôi đã đọc các tài liệu trên RequireJS (http://requirejs.org/docs/api.html#circular) tuy nhiên tôi đang tìm giải thích với 'a' và 'b' gây nhầm lẫn.

Đây là mã của tôi, mà gây ra vấn đề:

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; 

}); 

Tôi tự hỏi nếu bất cứ ai đã trải qua điều này trước khi có thể giúp chỉ đạo cho tôi đi đúng hướng .

Cảm ơn (trước) để được giúp đỡ của bạn,

Trả lời

11

Bạn chỉ cần sử dụng require bộ sưu tập một lần nữa khi bạn cần nó trong mô hình, như bộ sưu tập qua ban đầu có thể được undefined:

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; 

}); 

Trong ví dụ họ cũng nhập require nhưng nó cũng nên làm việc mà không nhập khẩu.

+0

Hoạt động tuyệt vời, cảm ơn – user1031947

+0

Man - Tôi đã cố gắng tìm ra một vấn đề phụ thuộc vào circ trong một trong các dự án của tôi và điều này thực sự đã giúp tôi - cảm ơn rất nhiều. – Stevus

+0

Điều này có thể gây ra sự cố kể từ khi tải bộ sưu tập lần thứ hai có thể không đồng bộ? –

0

Đối với điều này bạn nên xem xét sử dụng một plugin như Backbone Relational.

+0

Cảm ơn, tôi đã quan sát Backbone Relational. Tôi có cảm giác rằng đối với một danh sách lồng nhau đơn giản, đó là tất cả những gì tôi cần, đó là một chút quá mức cần thiết. – user1031947

Các vấn đề liên quan