0

我尝试了 2 种不同的方法来管理收藏,第二种方法对我来说听起来更干净,但我无法让它发挥作用。

我来这里是为了了解在这种非常基本的情况下,在骨干网和 mongoDB 模式上组织代码的最佳方法是什么(以及为什么第二个不起作用)

在我的两个示例中,情况都collection FriendsModel User

第一个例子(效果很好)

客户端

App.Models.User = Backbone.Model.extend({
    defaults : {
        username : "example",
        Friends: []
    },
});

服务器端

UserSchema : {
        name: {
            type: String,
            required: true,
            unique: true
        },
        Friends:
        [ {
            user_id: {
                type: mongoose.Schema.Types.ObjectId,
                ref: 'User'
            },
            status: {
                type: Boolean
            },
        }]

Friends references使用这种方法,当我从客户端填充User document集合时,主干可以很好地收集集合。

第二个示例(对我来说似乎更干净,但在获取集合时失败)

客户端

App.Models.User = Backbone.Model.extend({
    defaults : {
        username : "example",
        status: [], //Since Friends is now a collection i build an array to index each user_id according to its status.
        Friends: new App.Collections.User()
    },
});

服务器端

UserSchema : {
        name: {
            type: String,
            required: true,
            unique: true
        },
        status: [ {
          user_id: {
                type: mongoose.Schema.Types.ObjectId,
                ref: 'User'
            },
          value: Bolean 
        } ],
        Friends:
        [ {
            user_id: {
                type: mongoose.Schema.Types.ObjectId,
                ref: 'User'
            }
        }]

应用程序集合用户

App.Collections.User = Backbone.Collection.extend({
    model: App.Models.User,

    initialize : function() {

    },

    getFriends: function(callback) {
        console.log('getFriends called!');
        this.url = App.url+'friends';
        this.fetch({
            success: function(collection, response, options) {
                console.log('fetch OK');
                console.log(collection.toJSON());
                callback(true);
            },
            error: function(collection, response, options) {
                console.log('fetch KO');
                callback(false);
            }
        });
    }
});

使用这种方法,当我获取 时Friends collection,我得到一个错误Uncaught TypeError: undefined is not a function (on chrome)或者TypeError: this.model is not a constructor (on firebug),两者都在backbone-0.9.9.js (ligne 26)

success callback它发生在from方法内部之前,collection's fetch并且仅当从服务器 ide 返回一个集合时(当它为 null 时,没有问题,例如骨干网无法解析它)。

返回的 JSON 如下所示:

   [
      {
          "__v": 0,
          "_id": "5137cdf1538238073f000005",
          "username": "Someone Else",
          "status": [
           {
             "user_id": "5137cb9b730754a666000006",
              value: true
           }
          ],
          "Friends": [
            {
              "user_id": "5137cb9b730754a666000006",
              "_id": "5137cf2e0399fd7c3f000005"
            }
          ],
        },
        "_id": "5137cf2e0399fd7c3f000006"
      }
    ]

那么在这两种方法之间组织代码的最佳方法是什么?为什么你认为我在第二个错误时会出现这个错误(我的 JSON 无效吗?)?

4

1 回答 1

1

确保您的集合 api 的返回是有效的 json。您提供的示例 json 返回无效

您可以通过在此处复制粘贴示例 json 字符串来检查有效性

http://jsonlint.com/

于 2013-03-07T10:04:30.503 回答