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

How to coordinate BackboneJs views and pass objects between them?

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

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

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

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


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

工作代码流

views/customer/list 视图的 initialize 函数中,客户集合 (collections/customers) 由 this.collection.fetch 获取。从服务器获取客户集合后渲染完成后,我在 html table.

中显示了一个客户列表

当用户单击 table 行中的 'Edit' 按钮时,将触发一个事件。该事件的目的是加载 customer/edit 视图,以便用户可以从 table.

更新所选客户

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

总结

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

问题

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

我会考虑更改您的申请流程。不要从你的 listView 中获取你的 collection,而是从你的路由器中获取它并将其传递给你的 listView。然后,当您的路由器调用您的 editView 时,您也可以将 collection 传递给 editView,而无需再次获取它。然后只需从您的 editView 调用 this.collection.get(selectedCustomerId) 即可。希望这能回答您的问题,但如果不仔细查看您的代码,我也帮不了什么忙。