gpt4 book ai didi

backbone.js - 为集合创建主干 View

转载 作者:行者123 更新时间:2023-12-03 20:48:01 27 4
gpt4 key购买 nike

如何将主干 View 绑定(bind)到集合而不是模型?我需要将集合包装在模型中吗?

例如

如果我有一个主干模型 Client 和这些称为 Clients 的集合

Client = Backbone.Model.extend({
defaults: {
Name: ''
}
});

Clients = Backbone.Collection.extend({
model: Client,
url: 'Clients'
});

和一个 View
    var ClientListView = Backbone.View.extend({
template: _.template($("#clients-template").html()),
el: $('#clientlist'),

initialize: function() {
_.bindAll(this, 'render');

this.collection = new Clients();
},

render: function( event ){
$(this.el).html(this.template({ this.collection.toJSON()));

return this;
}
});

那么我无法访问下划线模板中的每个客户端元素。但是,如果我像这样包装集合
$(this.el).html(this.template({ clients: this.collection.toJSON() }));

那么我可以。这是解决这个问题的正确方法吗?我希望这是一个常见的场景,但我找不到任何例子,我是不是走错了路?

最佳答案

是的,您需要传递包装好的集合。

Addy Osmani 在他的 Backbone Fundamentals 中使用了类似的方法。示例 - 参见示例 this view和相应的template :

在 View 中:

$el.html( compiled_template( { results: collection.models } ) );

在模板中:
<% _.each( results, function( item, i ){ %>
...
<% }); %>

另一种选择是有一个 View ,它将为集合中的每个模型创建单独的 View 。这是来自 An Intro to Backbone.js: Part 3 – Binding a Collection to a View 的示例:

var DonutCollectionView = Backbone.View.extend({
initialize : function() {
this._donutViews = [];
this.collection.each(function(donut) {
that._donutViews.push(new UpdatingDonutView({
model : donut,
tagName : 'li'
}));
});
},

render : function() {
var that = this;
$(this.el).empty();

_(this._donutViews).each(function(dv) {
$(that.el).append(dv.render().el);
});
}
});

关于backbone.js - 为集合创建主干 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844345/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com