Там, кажется, разница междуCanJS: Model.findAll() против нового Model.List()
can.Component.extend({
viewModel: {
items: new Model.List(),
updateItems: function(viewModel) {
viewModel.attr('items', new Model.List({}));
}
}
и
can.Component.extend({
viewModel: {
items: new Model.List(),
updateItems: function(viewModel) {
Model.findAll({}, function(items) {
viewModel.attr('items', items);
});
}
}
в том, что бывшие спусковые изменить события по пунктам но последний нет, посмотрите пожалуйста jsfiddle.
- Может кто-нибудь объяснить, почему? Насколько я понимаю, документы как
new Model.List()
, так иModel.findAll()
возвращаютcan.Model.List
. - Событие не запускается, когда результатом является пустой список. Если это не вызовет хотя бы событие
length
?
Спасибо, Джастин, я понимаю, что понимаю техническое объяснение. Я бы ожидал изменений событий, когда я слушаю поле модели, независимо от того, как это поле изменилось. Каким будет рекомендуемый способ достижения этого? Есть ли лучший способ настройки событий или я должен позвонить своему собственному обработчику внутри 'findAll' callback? – peterwimsey
Вычисления с помощью плагина define - лучший способ передать это. Они могут прослушивать различные значения и обновлять только один раз. Я действительно не слушаю события в моих приложениях CanJS. Посмотрите пример MakeModelYear: http://canjs.com/docs/can.List.plugins.promise.html и эту скрипту: http://jsbin.com/tehobu/4/edit?html,js,output –
" Я бы ожидал изменений событий, когда я слушаю поле модели, независимо от того, как это поле изменилось ». Скажем, существовал объект со свойствами, такими как root.base.child.prop. Если вы слушаете child.prop, вы не должны ожидать уведомления об изменении root.base. Я не думаю, что все работает так. –