Удаленный сторонний сервер JSONP предоставляет моему скрипту CanJS список результатов, подобный этому:
[
{ "class": "ABaseClass", "value": "1"},
{ "class": "ASubClass", "value": "2"},
{ "class": "ABaseClass", "value": "3"},
{ "class": "ASubClass", "value": "4"},
...
]
где type
— предполагаемый класс объекта, определенный в CanJS с использованием can.Model.extend
:
Следующий упрощенный код демонстрирует настройку CanJS:
ABaseClass = can.Model.extend({ ... }, {
'findAll': { 'url': 'the url', 'dataType': "jsonp" }
// this is modified source code and may not run
});
// ASubClass is a subclass of ABaseClass.
ASubClass = ABaseClass.extend({ ... }, { ... });
Проблема:
Когда вызывается ABaseClass.findAll({}, function(data) { ... })
, который вызывает конечные точки JSONP для большего количества объектов, обратный вызов получает список моделей CanJS, но только класса ABaseClass
.
Вопрос:
Есть ли в CanJS вспомогательный метод для автоматического создания подклассов на основе поля в списке объектов? Если нет, как я могу его реализовать?
Ожидаемый результат:
[
(new ABaseClass(...)),
(new ASubClass(...)),
(new ABaseClass(...)),
(new ASubClass(...)),
...
]
Окружающая среда:
- CanJS: 1.17
- jQuery: 1.10.1
- Я не могу контролировать, какие типы объектов возвращает конечная точка.
- Множественные вызовы AJAX не являются приемлемым решением.