如何协调BackboneJ的视图并在它们之间传递对象
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
获取。当从服务器获取customers集合后渲染完成时,我在html表中显示了一个customers列表。
当用户单击表行中的"编辑"按钮时,会触发一个事件。该事件的目的是加载customer/edit
视图,以便用户可以更新表中选定的客户。
这是通过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
中获取集合,不如从路由器中获取集合并将其传递给listView
。然后,当路由器调用editView
时,您也可以将集合传递给editView
,而无需再次获取。那么,只需要从您的editView
呼叫this.collection.get(selectedCustomerId)
即可。希望这能回答您的问题,但如果没有更好地查看您的代码,我将无法提供更多帮助。
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在控制器和数据对象之间同步数据
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 尝试在一个对象的值和一个对象数组之间进行匹配
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 快递之间的区别.路由器() vs 多个 express() 对象
- 节点模块对象范围:在所有函数之间共享一个对象
- 在不同数据选项之间循环迭代对象
- 在 JavaScript 中的对象内分配柯里函数时,这和 self 之间有什么区别吗?
- 不同对象之间的递归,并将它们唯一地组合在一起,不重复
- 两个对象之间的Javascript原型
- 什么's对象文字中带引号和不带引号的键之间的区别
- 只有一些带undercore.js的字段在对象数组之间求交集和等于
- 用户如何获取两个时间戳之间的对象
- 在window.onload之前/之后创建对象之间的区别