Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Backbone.js加载模型关系_Ruby On Rails_Rest_Model_Backbone.js_Relationship - Fatal编程技术网

Ruby on rails 使用Backbone.js加载模型关系

Ruby on rails 使用Backbone.js加载模型关系,ruby-on-rails,rest,model,backbone.js,relationship,Ruby On Rails,Rest,Model,Backbone.js,Relationship,我正在用Rails REST后端编写我的第一个Backbone.js应用程序,有一件事让我感到困惑,那就是模型之间的关系 我正在编写的这个应用程序将有票证和客户端作为模型。我已经设置了票据和客户集合 事实证明,我有几千个客户,我不想在内存中加载他们,相反,当票证引用客户时,我想懒洋洋地加载客户 我尝试了一种非常简单的方法,但显然不起作用,因为Model\fetch()方法是异步的 这是我到目前为止的机票型号(咖啡脚本): 您可以想象,clientName()函数总是返回“undefined un

我正在用Rails REST后端编写我的第一个Backbone.js应用程序,有一件事让我感到困惑,那就是模型之间的关系

我正在编写的这个应用程序将有
票证
客户端
作为模型。我已经设置了
票据
客户
集合

事实证明,我有几千个客户,我不想在内存中加载他们,相反,当票证引用客户时,我想懒洋洋地加载客户

我尝试了一种非常简单的方法,但显然不起作用,因为
Model\fetch()
方法是异步的

这是我到目前为止的机票型号(咖啡脚本):

您可以想象,
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);
}

谢谢你的回复。然而,
subsive.Models.clientName(lead)
到底做了什么?它来自哪里?
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);
}