【问题标题】:backbone fetching a model returning strange data主干获取模型返回奇怪的数据
【发布时间】:2015-08-19 11:12:38
【问题描述】:

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

var projectModel = new App.Models.Project({ id: 1001 });
projectModel.fetch();

提取有效,我从服务器返回数据,但数据不是我期望的格式,项目是包含其他模型和集合的模型,但是从服务器返回并进入模型的是像这样,

{ project_name: "A Test Project" project_managers: Array[5], workers: Array[10] }

这意味着每次我为一个项目进行抓取时,我都必须设置每个需要成为模型或集合的属性,

projectModel.set('workers', new App.Collections.Users(projectModel.get('workers')));

在我的模型中,我确实有一个初始化函数,我在其中执行所有这些设置,但这似乎在获取时被忽略了。

肯定有比单独检查属性更好的方法来设置我的属性吗?

如果像这样覆盖模型中的 parse 方法,

parse: function(response, options) {
  this.set('workers', new App.Collections.Users(response.workers));
}

这确实将工作人员作为项目模型中的集合返回,但它忽略了名称等单个属性,所以我希望它会返回,

{
  name : Test Project,
  workers : s //this is how console.log outputs it
},

但我得到的都是,

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

这是为什么?

【问题讨论】:

    标签: javascript backbone.js backbone-model


    【解决方案1】:

    您可以覆盖您的模型解析方法以实现此行为,以便在每次获取模型时自动执行

    http://backbonejs.org/#Model-parse

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

    所以在你的模型中

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

    【讨论】:

    • 谢谢,这似乎部分有效,请查看我的编辑。
    • @Udders 你必须在 parse 方法中返回整个属性哈希,修改你想要改变的那些。我已经编辑了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2016-02-14
    相关资源
    最近更新 更多