Backbone Fetch相关模型

时间:2014-08-10 21:00:04

标签: javascript backbone.js

我正在使用Backbone应用程序,但到目前为止我所阅读的所有内容都是关于显示项目列表(例如TODO列表)或单个项目。

现在我有用户,每个用户都有一个技能列表(非常像任何游戏)。我可以轻松获得所有用户或单个用户,技能相同,但如果我想获得给定用户的所有技能,该怎么办?我该怎么做?

我想过用一个新的集合实例向用户添加一个属性,如下所示:

var Users = Backbone.Model.extend({
  skills: new Skills({ user: this })
});

var Skills = Backbone.Collection.extend({
  model: Skill,
  url: '/someUrl',
  initialize: function (options) {
    // fetch all skills from an user
    this.fetch({ data: { user: options.user.get('id') } });
  }
});

但我对Backbone没有多少经验,我也不太喜欢这个想法,请求看起来像/someUrl?user=1,我宁愿避免, /someUrl/user/1会好得多。

我也注意到BackboneRelational但我还没有真正尝试过,这对我的问题似乎有点过分,但也许我错了。

我应该采取什么方法来获取我的所有用户技能?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我强烈建议您查看此post,确定您会找到答案。如果简短,您可以在没有任何其他插件的情况下使用以下方法并构建嵌套模型:

期待关注json:

{
   name: 'Gorbachov',
   age: '75',
   skills: [
       {
           name: 'kalashnikov'
       }, 
       {
           name: 'vodka'
       },
       {
           name: 'balalaika'
       }
   ]
}

允许更新User型号:

User = Backbone.Model.extend({
    initialize: function(){
        var skills = this.get("skills");
        if (skills){
            this.skills = new Skills(skills);
            this.unset("skills");
        }
    }        
})

然后create SkillsCollection

SkillsCollection = Backbone.Collection.extend({
    model: Skill
})

Skill型号:

Skill = Backbone.Model.extend({
    defaults: {
        name: 'unnnamed'
    }
})