Require.js backbone.js круговая иерархия дерева зависимостей - PullRequest
2 голосов
/ 12 марта 2012

У нас есть древовидная иерархия магазинов.Каждый магазин может иметь только одного родителя, но может иметь несколько детей.Наш API возвращает свои результаты, вложенные так:

Мы хотели бы создать коллекцию моделей магазинов, а дети - другую коллекцию моделей магазинов.

[{'name': 'store_a',
  'children': [{'name': 'store_b',
                'children': [{'name': 'store_c',
                              'children': []
                             }],
                },
                {'name': 'store_d',
                 'children': [],
                }]
}]

у нас естьмодель магазина:

define([
  'jquery',
  'jquery',
  'jCookie',
  'underscore',
  'backbone',
  'require'
], function($, jQuery, cookie, _, Backbone) {

    var StoreModel = Backbone.Model.extend({
        initialize: function(){
            if(this.get('children') instanceof Array){
                console.log(this);
                var child = new require('collections/stores')(new StoreModel(this.get('children')));
                this.set('children', child);
            }
        }
    });

  return StoreModel;

});

Эта модель магазина должна получить выборку JSON (когда мы вызываем collection.fetch ()), если model.children является массивом, тогда он должен создать коллекцию из этого и, следовательно,рекурсивно спускайтесь по дереву, превращая все массивы детей в коллекции.Как только он возвращается из инициализации модели, он должен установить атрибут «children» текущей модели в коллекцию.

Коллекция -

define([
  'jquery',
  'underscore',
  'backbone',
  'models/store'
], function($, _, Backbone, storeModel){

  var StoresCollection = Backbone.Collection.extend({
    model: storeModel,
    url: '/api/stores'

  });

  return StoresCollection;
});

Довольно скелеты ('scuse the pun)

и представление

define([
  'jquery',
  'underscore',
  'backbone',
  'collections/stores',
  'text!templates/stores/tree.html'
], function($, _, Backbone, StoreCollection, storeListTemplate){


  var StoresListView = Backbone.View.extend({
    el: $("#page"),
    events: {
    },

    initialize: function(){
        this.login();
        _.bindAll(this, 'render', 'recurse');
        this.collection = new StoreCollection();
        this.collection.bind('reset', this.render);
        this.collection.fetch();
        console.log('initialize');
        console.log(this.collection);
    },

    render: function(){
        console.log("in render");
        console.log(this.collection);
    }
  });
  return StoresListView;
});

В этот момент происходит то, что я получаю

Uncaught TypeError: У объекта [объект DOMWindow] нет метода '_reset'

в backbone.js в строке 447.

Я также пытался вернуть объект из коллекции вместо «класса», но это означает, что я продолжаю добавлять к одному и тому же объекту и, следовательно, к рекурсивной функциикоторый требует нового экземпляра коллекций для каждого рекурса, не работает.

Должно ли работать вышеперечисленное?я должен быть в состоянии сделать это?

Ура

Марк

...