В вашем findAll не должны быть жестко закодированы идентификаторы страницы и раздела в строке GET, поскольку это сделало бы ваш can.Model специфичным только для этой страницы. Ваш код, который вызывает findAll, должен предоставлять их.
Подклассы can.Model представляют тип данных, которые вы получаете с сервера. findAll предназначен для извлечения некоторого количества объектов этого типа. Ваша строка GET, похоже, хочет вернуть магазины. Мы могли бы назвать вашу модель WebStore (я избегаю использования слова «Магазин», потому что это слово имеет другое значение в CanJS).
can.Model.extend("WebStore", {
findAll : "GET /api.php/stores-for-you?max_fav=3&max_reco=3"
}, {});
В этой спецификации для вашего findAll мы оставили некоторые ключи пейджинга (max_fav и max_reco, похоже, являются ограничителями результатов), чтобы другой код не мог запросить 3000 результатов за раз. Другие, однако, предназначены для определенных страниц. Это фактически запросы. Если вы поместите их в свою спецификацию findAll, ваша Модель сможет получить только эту страницу, что ограничит ее повторное использование.
так что теперь в другом коде, вероятно, прототип контроллера init():
var ws_ajax = WebStore.findAll({ pid : 977, sid : 5938 });
ws_ajax.done(function(stores) {
//Handle the array of 0-3 stores returned from the server.
});
Итак, теперь вы можете вызывать другие страницы и разделы позже в другом коде, просто выполняя тот же вызов с другими значениями pid и sid. Вам не нужно пытаться взломать findOne для другой страницы.
ОДНАКО... если по какой-то причине вы часто используете эту конкретную комбинацию страницы/раздела, вы можете рассмотреть возможность использования другой функции в статических свойствах вашей модели онлайн-магазина, и тогда это будет выглядеть так:
can.Model.extend("WebStore", {
findAll : "GET /api.php/stores-for-you?max_fav=3&max_reco=3",
findMyPage : function() {
return this.findAll({ pid : 977, sid : 5938 });
}
}, {});
Обратите внимание, что findMyPage не имеет особого значения в CanJS. Вы просто обертываете findAll часто используемыми значениями, чтобы избавить себя от лишней головной боли при вводе и обслуживании, если эти значения изменятся.
Упражнение, оставленное читателю, состоит в том, чтобы реализовать "findMyOtherPage", который найдет... вашу другую страницу.
РЕДАКТИРОВАТЬ: более подробная информация добавлена по запросу.
person
air_hadoken
schedule
24.12.2013