Requirejs backbone.js循环依赖树层次结构

时间:2012-03-12 06:11:07

标签: jquery backbone.js requirejs

我们有一个商店的树层次结构。每个商店只能有一个父母,但可以有多个孩子。我们的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;

});

这个商店模型应该获取fetch JSON(当我们调用collection.fetch()时),如果model.children是一个Array,那么它应该从这个创建一个Collection,因此递归地沿着树转向所有Arrays孩子们,收藏品。一旦从初始化模型返回,它应该将当前模型的'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:Object [object DOMWindow]没有方法'_reset'

在第447行的backbone.js中

我也尝试从集合中返回一个对象而不是'class',但这意味着我不断添加到同一个对象,因此每个recurse需要一个新的集合实例的递归函数不起作用

上述应该如何工作?我能做到吗?

干杯

标记

0 个答案:

没有答案