【问题标题】:Backbone.js wrapper template for a Collection集合的 Backbone.js 包装器模板
【发布时间】:2013-11-30 12:44:35
【问题描述】:

我的 Backbone 应用程序将有一个集合的多个对象,每个集合包含多个模型。我想做的是将每个 Collection 对象包装到一个 div 元素中,并根据集合对象属性值自定义标题。

目前 Collection 正在使用模型的视图,并且不包含任何自己的模板。

将每个集合对象包装到模板中的最佳方法是什么?

更新:

这是我的 CollectionView 目前的样子:

window.OrderListView = Backbone.View.extend({
    el: '#all-orders-container',
    template: _.template(orderListTpl),
    initialize: function() {
      this.$el.append(this.template({order_id: this.collection.order_id}));
    },
    render: function(){
        var _this = this;
        this.collection.forEach(this.addItem, this);
    },
    addItem: function(orderItem){
        var orderView = new OrderView({
            model: orderItem
        });

        this.$el.append(orderView.render());
    }
  });

同一个 CollectionView 类会有多个对象。现在的问题是 - 如何将它们呈现为单独的元素,并将新的 orderView 元素附加到适当的元素中?

【问题讨论】:

  • 您可以为您的集合解释一些包含多个模型对象的示例吗?
  • 主干集合旨在组织特定模型的对象,否则它不完全是主干集合
  • 但是我应该可以拥有同一个 Collection 的多个对象,对吧?

标签: javascript backbone.js


【解决方案1】:

实现这样的集合视图

var CollectionView = Backbone.View.extend({

    render:function(){
        var _this = this;
        this.collection.each(function(model){
            _this.addItem(model)
        })
    },
    addItem:function(model){
        var itemView = new ItemView({
            model:model
        });

        itemView.render().$el.appendTo(this.$el);

    }

});

【讨论】:

  • 谢谢,这是一个很好的提示。但是这个 CollectionView 会有多个对象,我想知道如何将正确的根元素传递给这个特定 CollectionView 的 $el。或者我可能应该在 CollectionView 初始化时更改 $el 的值,以便每次都创建一个新的?
  • @AlexanderSavin 我不太确定上述评论中有什么问题,如果是关于将 $el 分配给 CollectionView,您可以在实例化 CollectionView 时执行此操作,例如 var collView = new CollectionView({el:'your selector'})
  • 是的,我现在通过为每个 CollectionView 对象手动生成 el 解决了这个问题。不是很优雅,但很有效!
  • 我不知道你是否已经知道,如果你不为视图指定 el,它将创建它自己的。您无需创建,查看主干源代码中的_ensureElement 函数,您可能会更好地了解跳过 el 时会发生什么
  • 谢谢,不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多