使用嵌套的json填充嵌套集合

ped*_*ete 3 nested backbone.js

在我的路线解决方案

Myapp.Routes = Backbone.Router.extend({
   init: function(){
        user = new User();
        user.fetch({user,
                     success: function(response){
                             user.classlist = new classes(response.attributes.classes);
           });

   }

});

我从我的服务器返回了一个序列化的json数组,我试图将嵌套对象放入我的嵌套集合中.

这个答案,我认为会让我在那里,但我错过了一些东西. 如何使用Backbone.js从嵌套的JSON构建集合/模型

我试图用我的嵌套模型填充的json是

{first_name: "Pete",age: 27, classes: [{class_name: "math", class_code: 42},{class_name: "french", class_code: 18}]}

我创建了我的用户模型

MyApp.Models.Users = = Backbone.Model.extend({

    initialize: function(){
        this.classlist = new MyApp.Collections.ClassList();

        this.classlist.parent = this;

    }

});

我曾尝试在另一页上关注该示例,并使用

      this.classlist = new MyApp.Collections.ClassList(this.get('classes'));

        this.classlist.parent = this;

this.get('classes')返回undefined.

我也试过通过this.attributes.classes获取classes数组,但这也是未定义的.

------------更新为包括重新初始化--------------------我正在初始化用户和类的函数用户路由并称为重新初始化.我使用此函数来获取用户及其类并存储该对象.

re_initialize: function(id){
            user = new MyApp.Models.User();
            MyApp.editingClasses.url = 'classes/'+id;
            MyApp.editingClasses.fetch({
                        success: function(response){
                        MyApp.editingClasses.parse(response);
                        }
            });

        new MyApp.Views.ClassesInput();
    },

正如您所看到的,我parse在成功函数中显式调用,但它不是将类添加到集合中.

我不能包含'集合',因为由于某种原因我不能在骨干中访问它.返回骨干后的用户模型包括classes数组,我试图将其放入ClassList集合中.

从javascript终端复制的用户模型对象如下所示.

attributes: Object
created_at: "2012-01-05T16:05:19Z"
id: 63
classes: Array[3]
   0: Object
   created_at: "2012-01-18T20:53:34Z"
   id: 295
   teacher_id: 63
   class_code: 42
   updated_at: "2012-01-18T20:53:34Z"
   class_name: math
   __proto__: Object
  1: Object
  2: Object
  length: 3
  __proto__: Array[0]

sat*_*run 9

您可以使用该parse函数预处理服务器响应:

MyApp.Models.Users = Backbone.Model.extend({
  parse: function(response) {
    var classesJSON = response.classes;
    var classesCollection = MyApp.Collections.ClassList(classesJSON);
    response.classes = classesCollection;
    return response;
  }
});

var user = new MyApp.Models.Users();
user.fetch();

// You should now be able to get the classlist with:
user.get('classes');
Run Code Online (Sandbox Code Playgroud)

也就是说,另一个问题中建议的方法也应该有效.可能是在initialize调用函数时,模型尚未填充数据?

例如,如果您正在做:

var user = new MyApp.Models.Users();
Run Code Online (Sandbox Code Playgroud)

它还没有任何属性可以提供给classlist集合.这可能是你的问题吗?