如何协调 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)
即可。希望这能回答您的问题,但如果不仔细查看您的代码,我也帮不了什么忙。
我有一个 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)
即可。希望这能回答您的问题,但如果不仔细查看您的代码,我也帮不了什么忙。