Backbone.js:组合多个模型的复杂视图

Posted

技术标签:

【中文标题】Backbone.js:组合多个模型的复杂视图【英文标题】:Backbone.js: complex views combining multiple models 【发布时间】:2011-11-15 04:25:16 【问题描述】:

到目前为止,我一直在尝试的所有测试和教程,以了解我脑海中的结构,告诉我一个视图绑定到 1 个模型。

假设我有一个小应用程序来存储和管理联系方式(地址簿) 我有多个可以登录的用户 他们每个人都有自己的联系人集合。

用户详细信息视图将绑定到用户模型 联系人也是如此

但是说我想展示一个结合这两者的网格 X 轴显示应用程序中的所有联系人 Y 轴显示所有用户,

这是如何工作的?我需要为此创建一个新模型以绑定到新视图吗?

你明白了,这只是一个理论示例,我不是在构建该应用程序,而是为了获得一个结合多个模型的视图的想法

【问题讨论】:

要从视图中访问这两个模型,请参阅***.com/questions/7734559/… 【参考方案1】:

如果您确定它们不使用相同的参数,您也可以考虑合并两个模型。

var modelA = new myModel( color: "blue" );
var modelB = new otherModel( age: 35 );

var superModel = new Backbone.Model();
superModel.set(modelA);
superModel.set(modelB);

console.log("color:", superModel.get("color"));
console.log("age:", superModel.get("age"));

也看看Backbone.Model.extend()

【讨论】:

【参考方案2】:

在这种情况下,我会考虑使用您的两个子模型的动态模型。在您的路由处理程序中,您可以执行以下操作:

var model = new Backbone.Model();
model.set(contacts: new ContactsModel(), users: new UsersModel());
var view = new GridView(model: model);

当然,没有什么能阻止你单独传入模型:

var contacts = new ContactsModel();
var users = new UsersModel();
var view = new GridView(model: contacts, users: users)

我仍然更喜欢第一种方法的复合方法,因为它不会混淆模型是什么。

【讨论】:

感谢您的信息,我已经知道我可以做类似第二种方法的事情,但正如您所说,我也会觉得这很奇怪,因为它将联系人定义为模型,而用户会只是一些额外的信息......我不知道这种动态模型结构,我必须在我的真实实体之间创建和存储一个全新的模型。感谢您的洞察力! 在这种情况下如何处理model.fetch()?您的模型没有网址。

以上是关于Backbone.js:组合多个模型的复杂视图的主要内容,如果未能解决你的问题,请参考以下文章

使用backbone.js 从视图访问模型数据

多个模型子类的 Backbone.js 集合

Backbone.js 中的模型

如何在 Backbone.js 视图之间传递事件?

在Backbone.js视图中动态设置id和className

模型和集合到 Backbone 中的一个视图