Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 - Fatal编程技术网

Javascript 主干获取相关模型

Javascript 主干获取相关模型,javascript,backbone.js,Javascript,Backbone.js,我正在开发一个主干应用程序,但到目前为止,我读到的所有内容都是关于显示项目列表(例如待办事项列表)或单个项目 现在我有用户,每个用户都有一个技能列表(和任何游戏都很相似)。我可以很容易地获得所有用户或单个用户,技能相同,但如果我想获得给定用户的所有技能,该怎么办?我该怎么做 我考虑只使用集合的新实例向用户添加一个属性,如下所示: var Users = Backbone.Model.extend({ skills: new Skills({ user: this }) }); var Sk

我正在开发一个主干应用程序,但到目前为止,我读到的所有内容都是关于显示项目列表(例如待办事项列表)或单个项目

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

我考虑只使用集合的新实例向用户添加一个属性,如下所示:

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') } });
  }
});
但是我对主干网没有太多经验,我也不太喜欢这样的想法,而且请求看起来像
/someUrl?user=1
,我宁愿避免,
/someUrl/user/1
会更好

我也注意到了,但我还没有真正尝试过,对于我的问题来说,这似乎有点矫枉过正,但也许我错了


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

我强烈建议您签出此邮件,您一定会找到答案的。如果很短,您可以采用以下方法,而无需任何附加插件并构建嵌套模型:

预期会出现以下json:

{
   name: 'Gorbachov',
   age: '75',
   skills: [
       {
           name: 'kalashnikov'
       }, 
       {
           name: 'vodka'
       },
       {
           name: 'balalaika'
       }
   ]
}
让我们更新
用户
型号:

User = Backbone.Model.extend({
    initialize: function(){
        var skills = this.get("skills");
        if (skills){
            this.skills = new Skills(skills);
            this.unset("skills");
        }
    }        
})
Skill = Backbone.Model.extend({
    defaults: {
        name: 'unnnamed'
    }
})
然后
创建技能集合

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

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

哦我明白了,那感觉肯定好多了。谢谢!我将阅读这篇文章并尝试实现这一点。