2014-01-08 3 views
0

Есть ли чистый способ изменения модели коллекции Backbone во время выполнения? Другими словами, у меня есть коллекция под названием BaseCollection, где по умолчанию ее модель называется BaseModel. Модель выступает в качестве базового класса для других моделей. Скажем AModel, BModel и т.д.Можно ли изменить модель Backbone.Collection во время выполнения

Теперь во время выполнения сбора, основываясь на конкретных Params, необходимо понять, если это необходимо вызвать метод parse (с определенной перенастройки) в BaseModel или один из parse методов, используемых в модели, которые простираются от BaseModel.

Обычно это может привести к простому расширению коллекции каждый раз, когда я ее создаю. Так, например, по умолчанию определено следующее.

var BaseCollection = Backbone.Collection.extend({ 

    model : BaseModel, 

    // other stuff here 
}); 

Теперь, если я хочу, чтобы иметь коллекцию, где AModel должен быть model

BaseCollection.extend({ model: AModel }); 

Здесь сложный материал. Что делать, если коллекция не содержит модель того же типа. Другими словами, что, если BaseCollection содержит AModel s, BModel s и т. Д.? Обратите внимание, что мне нужно вызвать метод parse для каждой модели, так как они немного отличаются друг от друга.

ответ

3

magic Создание коллекции различных моделей осуществляется с помощью функции model.

здесь примеры из http://backbonejs.org/#Collection-model

var Library = Backbone.Collection.extend({ 

    model: function(attrs, options) { 
    if (condition) { 
     return new PublicDocument(attrs, options); 
    } else { 
     return new PrivateDocument(attrs, options); 
    } 
    } 
}); 

в вашем случае вы должны использовать атрибуты, чтобы решить, какую модель вы хотите создать

+0

Спасибо. +1. Я полностью пропустил его из документации. Если «условие» исходит из данных, возвращающихся из back-end, могу ли я продолжать применять это? Другими словами, где можно найти «условие»? Из 'attrs',' options' или где-то еще? –

+0

Условие @flexaddicted может быть получено из attrs, опции, состояния коллекции, флага или любого другого «синхронного» кода, который у вас есть – ekeren

+0

Так, например, в attrs я найду атрибуты, возвращаемые из запроса, принадлежащего определенной модели. Правда? –

Смежные вопросы