其他集合元素中的骨干渲染集合

时间:2015-03-16 17:22:09

标签: javascript backbone.js

我有一个需要渲染的结构。它有线性类型:

{districts : [
            {
                name : "D17043"                
            },
            {
                name : "D91832"
            },
            {
                name : "D32435"
            }
        ],
buildings : [
            {
                name : "B14745",
                district: "D17043",
                address: "1st str"
            },
            {
                name : "B14746",
                district : "D91832",
                address : "1st str"
            },
            {
                name : "B14747",
                district : "D17043",
                address : "1st str"
            }            
        ]
}

简化看起来好一点。地区附有建筑物。可能,结构可能是嵌套的,但我认为这会产生额外的麻烦,而且,由于这个“树”没有结构化,我制作了简单的对象。 问题是 - 如何与骨干一起正确显示? 现在它看起来像这样(一些细节留在幕后):

App.Collections.Districts = Backbone.Collection.extend({
        model : App.Models.District
    });
    var districtsCollection = new App.Collections.Districts(data.districts);
    var districtsView = new App.Views.Districts({collection : districtsCollection});

然后在区域集合视图中的某个地方,我们创建一个循环来创建单个区域的视图:

var districtView = new App.Views.District({model : district});

在单个区域的view内,我用render方法调用另一个集合:

App.Views.District = Backbone.View.extend({
        tagName : 'div',
        className : 'districtListElement',
        render : function () {                
            this.$el.html(this.model.get('name'));
            var buildingsCollection = new App.Collections.Buildings(allData.buildings);
            buildingsCollection.each(function(item){
                if (item.get('district') == this.model.get('name')) {
                    var buildingView = new App.Views.Building({model : item});
                    this.$el.append(buildingView.render().el);
                }
            }, this);
            return this;
        }
    });

这件事有效但不是有点令人毛骨悚然吗?也许有一个正确的方法来做到这一点?特别是如果我有其他实例在建筑物内。 谢谢。

0 个答案:

没有答案