如何协调BackboneJs视图并在它们之间传递对象?

时间:2015-02-19 18:06:14

标签: javascript backbone.js web-applications

我有一个BackboneJs应用程序,这里是它的文件结构。

|-- collections
|   |-- customers.js
...

|-- models
|   |-- customer.js
...

|-- views
|   |-- customer
|   |   |-- create.js
|   |   |-- edit.js
|   |   |-- list.js
...


|-- templates
|   |-- customers
|   |   |-- create.html
|   |   |-- edit.html
|   |   |-- list.html
...

工作代码流程

initialize视图的views/customer/list函数中,collections/customers提取了一个客户集合(this.collection.fetch)。在从服务器获取客户集合后完成呈现时,我有一个显示在html表中的客户列表。

当用户点击'编辑'表格行中的按钮会触发事件。该事件的目的是加载customer/edit视图,以便用户可以从表中更新所选客户。

这是通过Backbone.history.navigate('#customers' + customerId, {trigger:true})完成的。然后发生了一条路线并且/api/customers/{customerId}被召唤。

摘要

此结构没有问题,它按预期工作。但我认为没有必要去服务器获取客户的详细信息,因为collection中的views/customers/list拥有整个客户对象。我可以按如下方式选择一个 var selectedCustomer = this.collection.get(selectedCustomerId)

问题

我的问题是如何将selectedCustomer对象传递到views/edit视图,并取消服务器调用以获取客户的详细信息。此外,加载#customers/{customerId}视图时,哈希值应更改为views/customer/edit

1 个答案:

答案 0 :(得分:2)

我会考虑更改您的申请流程。不是从listView获取您的收藏,而是从路由器中获取该收藏并将其传递给您的listView。然后当您的路由器呼叫您的editView时,您也可以将该集合传递给editView,而无需再次获取它。然后,只需从this.collection.get(selectedCustomerId)致电editView即可。希望能回答你的问题,但如果没有更好地查看你的代码,我就无法提供更多帮助。