Javascript 如何协调BackboneJs视图并在它们之间传递对象? 我有一个BackboneJs应用程序,下面是它的文件结构。 工作代码流
在Javascript 如何协调BackboneJs视图并在它们之间传递对象? 我有一个BackboneJs应用程序,下面是它的文件结构。 工作代码流,javascript,backbone.js,web-applications,Javascript,Backbone.js,Web Applications,在views/customer/list视图的initialize功能中,客户集合(collections/customers)由this.collection.fetch获取。从服务器获取customers集合后完成渲染时,我在html表中显示了一个客户列表 当用户单击表行中的“编辑”按钮时,将触发一个事件。事件的目的是加载客户/编辑视图,以便用户可以从表中更新所选客户 这是通过Backbone.history.navigate('#customers'+customerId,{trigger
views/customer/list
视图的initialize
功能中,客户集合(collections/customers
)由this.collection.fetch
获取。从服务器获取customers集合后完成渲染时,我在html表中显示了一个客户列表
当用户单击表行中的“编辑”按钮时,将触发一个事件。事件的目的是加载客户/编辑视图,以便用户可以从表中更新所选客户
这是通过Backbone.history.navigate('#customers'+customerId,{trigger:true})
完成的。然后发生了一个路由,调用了/api/customers/{customerId}
总结
这种结构没有问题,它可以按预期工作。但是我认为没有必要去服务器获取客户的详细信息,因为views/customers/list
中的collection
包含整个客户对象。我可以得到如下选择的一个
var selectedCustomer=this.collection.get(selectedCustomerId)
问题
我的问题是如何将selectedCustomer
对象传递到views/edit
视图,并消除获取客户详细信息的服务器调用。此外,当“代码>视图/客户/编辑/代码>视图加载时,哈希应该更改为<代码>客户/ {CuuleIDI} /代码>。 < P>我会考虑更改您的应用程序流。不要从列表视图
获取收藏,而是从路由器获取收藏并将其传递给列表视图
。然后,当路由器调用您的editView
时,您也可以将集合传递给editView
,而无需再次获取。然后,只需从您的editView
调用this.collection.get(selectedCustomerId)
。希望这能回答您的问题,但如果没有更好地查看您的代码,我将非常有帮助。一点代码将非常有帮助。listView是调用editView,还是有主文件同时调用它们?您的主要入口点是什么?@morslima列表视图只导航到'customers/{customerId}
,然后应用程序的路由器调用相应的函数并加载编辑视图(新编辑视图
)。编辑视图从服务器获取数据,并在其初始化函数中传递客户id。绝对同意。通常,获取自己数据的视图将很难管理。宁愿将数据传递到视图initialize(…)
方法,然后将数据重新用于其他可能需要它们的视图。@PeterWagener,你们都是对的。但这种方法有一个问题。应用程序路由器变得太复杂了。我认为应该使用控制器模块。
|-- collections
| |-- customers.js
...
|-- models
| |-- customer.js
...
|-- views
| |-- customer
| | |-- create.js
| | |-- edit.js
| | |-- list.js
...
|-- templates
| |-- customers
| | |-- create.html
| | |-- edit.html
| | |-- list.html
...