kol*_*rie 3 rest model ruby-on-rails relationship backbone.js
我正在使用Rails REST后端编写我的第一个Backbone.js应用程序,令我困惑的一件事是模型之间的关系.
这个应用程序,我写会Ticket
和Client
为榜样.我也设置了两个Tickets
和Clients
集合.
事实证明我有几千个客户,我不想将它们加载到内存中,相反,当机票引用时,我想懒洋洋地加载客户.
我尝试过一种非常天真的方法,显然不起作用,因为Model#fetch()
方法是异步的.
这是我目前为止的Ticket模型(在CoffeeScript中):
class Deputy.Models.Ticket extends Backbone.Model
initialize: ->
@fetchClient()
fetchClient: ->
@client = new Deputy.Models.Client()
@client.set id: @get('userid')
@client.fetch()
clientName: ->
first = @client.get('firstname')
last = @client.get('lastname')
"#{first} #{last}"
Run Code Online (Sandbox Code Playgroud)
可以想象,该clientName()
函数始终返回"undefined undefined",因为在调用时fetch没有返回.
处理这种数据关系的正确方法是什么?请注意,我不介意你退后一步,说我使用了错误的方法并建议我做一些事情.
任何指针,文章或任何其他内容将不胜感激.
client.fetch()
接受success
将在完成时触发的选项.当你开火时fetchClient
你应该添加加载UI(可能就像用旋转图标替换按钮一样简单),当客户端完成加载时继续显示名称.
在JavaScript中你会做这样的事情:
fetchClient: function() {
var client = new Deputy.Models.Client();
client.set({ id: this.get('userid') });
client.fetch({ success: this.fetchClientSuccess });
// Or maybe the following depending on how you set up your code.
// client.fetch({ success: Deputy.Models.fetchClientSuccess });
},
fetchClientSuccess: function(lead, response) {
Deputy.Models.clientName(lead);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
430 次 |
最近记录: |