Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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
Javascript 主干获取返回奇怪数据的模型_Javascript_Backbone.js_Backbone Model - Fatal编程技术网

Javascript 主干获取返回奇怪数据的模型

Javascript 主干获取返回奇怪数据的模型,javascript,backbone.js,backbone-model,Javascript,Backbone.js,Backbone Model,我正在从我的服务器获取模型数据,就像在我的主干应用程序中一样 var projectModel=newapp.Models.Project({id:1001}) projectModel.fetch() 获取工作正常,我从服务器获取数据,但数据的格式不是我期望的格式,项目是包含其他模型和集合的模型,但是从服务器返回到模型中的内容是这样的 projectModel.set('workers', new App.Collections.Users(projectModel.get('workers'

我正在从我的服务器获取模型数据,就像在我的主干应用程序中一样

var projectModel=newapp.Models.Project({id:1001})
projectModel.fetch()

获取工作正常,我从服务器获取数据,但数据的格式不是我期望的格式,项目是包含其他模型和集合的模型,但是从服务器返回到模型中的内容是这样的

projectModel.set('workers', new App.Collections.Users(projectModel.get('workers')));
{
项目名称:“测试项目”
项目经理:数组[5],
工人:数组[10]
}

这意味着每次我为一个项目执行fetch时,我都必须设置每个属性,这些属性必须是一个模型或一个类似这样的集合

projectModel.set('workers', new App.Collections.Users(projectModel.get('workers')));
在我的模型中,我确实有一个initialise fnction,我在其中执行所有这些设置,但在获取时似乎忽略了这一点

当然有更好的方法来设置fetch属性,而不是单独检查它们

如果像这样在模型中过度使用parse方法

parse: function(response, options) {
  this.set('workers', new App.Collections.Users(response.workers));
}
这确实会在项目模型中将worker作为集合返回,但它会忽略单个属性,如name,因此我希望它会返回

{
  name : Test Project,
  workers : s //this is how console.log outputs it
},
但我得到的一切

{
    workers : s //this is how console.log outputs it
 }

这是为什么?

您可以重写模型解析方法,以实现每次获取模型时自动执行的行为

函数被传递给原始响应对象,并且应该返回要在模型上设置的属性哈希

所以在你的模型中

parse: function(response, options) {
  response.workers = new App.Collections.Users(response.workers));
  return response;
}

谢谢,这似乎部分起作用了,请看我的编辑。@Udders您必须在parse方法中返回整个属性散列,修改您想要修改的属性。我已经编辑了我的答案