BackboneJs: создание нескольких моделей в коллекции из вложенного объекта

{
    "code":"OK",
    "message":"Success",
    "errorFlag":"N",
    "errors":null,
    "data": {
        "images": {
            0: img0,
            1: img1,
            2: img2
        }
    }
}

Это ответ REST, и я хотел поместить записи «изображения» в свою коллекцию и рассматривать каждую отдельную запись как модель.

var Image.Model = Backbone.Model.extend({});
var Image.Collection = Backbone.Collection.extend({
    model: Image.Model,
    url: 'rest/url'
});
var images = new Image.TestCollection();
images.fetch();

Как я могу сделать записи внутри «изображений» единственными моделями коллекций изображений и поместить ключи кода, сообщения, ошибки и т. д. в другие модели или коллекции?

Спасибо.


person Barry    schedule 22.05.2013    source источник
comment
stackoverflow.com/questions/8782619/   -  person Evan Lévesque    schedule 22.05.2013


Ответы (1)


Используйте http://backbonejs.org/#Collection-parse.

// server.js
app.get('/api/data', function (req, res) {
    var result = {
        "code": "OK",
        "message": "Success",
        "errorFlag": "N",
        "errors": null,
        "data": {
            "images": {
                0: "img0",
                1: "img1",
                2: "img2"
            }
        }
    };
    res.json(result);
});

// client.js
var Image = Image || {};
Image.Model = Backbone.Model.extend({
});

Image.TestCollection = Backbone.Collection.extend({
    model: Image.Model,
    url: '/api/data',
    parse: function(response) {
        window.response =response;
        var images= [];
        for(var key in response.data.images){
            if(response.data.images.hasOwnProperty(key)){
                images.push(response.data.images[key]);
            }
        }
        return images;
    }
});
var images = new Image.TestCollection();
images.fetch();

P.S. Обычно хранить данные в ключах — плохая идея.

person slobodan.blazeski    schedule 22.05.2013
comment
Спасибо, это работает. Почему хранить данные в ключах — плохая идея? В этом случае мы используем его только внутри функции разбора. - person Barry; 22.05.2013
comment
Это не правило, высеченное в камне, но из моего опыта хранения в ключах, особенно с использованием чисел в качестве ключей, является PITA для манипулирования данными (в моем случае подчеркивание - огромная помощь), плюс, если вы используете числа в качестве ключей, как в вашем примере вы не можете использовать точечную нотацию, например images.0 . Поэтому может быть лучше изменить изображения с { 0 : img0, 1 : img1 } на [ {id: 0, name: img0}, {id: 1, name: img1}], но окончательное решение зависит от ваших потребностей. - person slobodan.blazeski; 22.05.2013