gpt4 book ai didi

javascript - Backbone : multiple View Models for the same model

转载 作者:可可西里 更新时间:2023-11-01 02:19:37 25 4
gpt4 key购买 nike

新手 Backbone 问题:

上下文:使用 Backbone 构建购物 list

我有一个名为名称、描述和标签(数组)属性的模型类。我想基于此模型或此模型的集合创建两个 View 。

第一个 View 将显示所有项目,如下所示:

<ul>
<li><h3>Item 1 Name</h3>
<p>Item 1 Description</p>
<p>Tag1, Tag2 ,Tag3</p>
</li>
.......
</ul>

第二个 View 将显示标签列表和标记项目的数量,如下所示:

<ul>
<li>Tag1<span>{count of items tagged with tag1}</span></li>
<li>Tag2<span>{count of items tagged with tag2}</span></li>
<li>Tag3<span>{count of items tagged with tag3}</span></li>
</ul>

我构建了模型、集合和 View 来支持第一个 View 。我想知道使用现有模型(或创建新模型?)构建第二个 View 的正确方法。

提前致谢...

现有的 Item 模型和集合(从 Todo.js 示例中提取)

window.Item = Backbone.Model.extend({
// Default attributes for a todo item.
defaults: function() {
return {
order: Items.nextOrder()
};
}
});


window.ItemList = Backbone.Collection.extend({

model: Item,

localStorage: new Store("items"),

nextOrder: function() {
if (!this.length) return 1;
return this.last().get('order') + 1;
},

comparator: function(item) {
return item.get('order');
}

});

更新:尽管覆盖 parse() 方法在显示带有项目计数的标签名称时有效,但我无法在添加新项目后刷新标签名称/项目计数列表。这可能是因为 View 是从不同的集合中呈现的。我将尝试扩展 ItemList 集合并覆盖 parse() 方法。非常感谢任何帮助。

最佳答案

@machineghost 是正确的;模型与 View 完全分离,因此您可以根据需要将尽可能多的 View 附加到同一模型。如果 View 具有您想要共享的逻辑或属性,您还可以扩展 View 。当我使用 Backbone 时,我经常发现自己扩展父 View 只是为了覆盖 render 函数,或者提供不同的模板。

第一 View

ShoppingCartView = Backbone.View.extend({
model: ShoppingCart
...
});

第二独立视角

CheckoutView = Backbone.View.extend({
model: ShoppingCart
...
});

第二个 View 先延伸

CheckoutView = ShoppingCartView.extend({ 
template: a_different_template // syntax depends on your templating framework
...
});

关于javascript - Backbone : multiple View Models for the same model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8597726/

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