Я думаю, что, возможно, я нашел некоторое несоответствие в Meteor JS. Во-первых, это является примером совершенно приемлемый код, который не вызывает ошибку в шаблоне Helper Метеор JS'S:Meteor JS: Несогласованность с Meteor JS при работе с курсорами?
Template.admin_menu_items.helpers({
menuItems: function(){
console.log('inside menuItems');
return MenuItems.find();
},
})
Однако если использовать сессии для хранения возвращаемого значения MenuItems.find()
например,
Template.admin_menu_items.rendered = function(){
var snapshot = MenuItems.find();
Session.set('menu_items', snapshot);
}
Затем используйте объект, хранящийся в Sessions в шаблоне Helper:
Template.admin_menu_items.helpers({
menuItems: function(){
console.log('inside menuItems');
//return MenuItems.find();
return Session.get('menu_items');
},
})
Я получаю следующее сообщение об ошибке:
Exception from Tracker recompute function:
meteor....ddc0aaf (line 888)
Error: {{#each}} currently only accepts arrays, cursors or falsey values.
meteor....ddc0aaf (line 888)
[email protected]://localhost:3000/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:179:1
ObserveSequence.observe/computation</<@http://localhost:3000/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:144:1
[email protected]://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:593:12
ObserveSequence.observe/computation<@http://localhost:3000/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:121:7
[email protected]://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:327:5
[email protected]://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:346:9
[email protected]://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:485:9
[email protected]://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:372:11
Который не имеет смысла, потому что я храню приемлемое возвращаемое значение MenuItems.find()
внутри сеанса и извлечение его .... он все равно должен быть курсором после извлечения ..... прав ???
Какое объяснение для этого ???
Чтобы подчеркнуть, что использование сеансов для хранения значения не изменяет объект, сохраненный при извлечении .... Я пробовал тот же код, но только с массивом вместо курсора ... так что это var snapshot = MenuItems.find().fetch();
вместо var snapshot = MenuItems.find();
и с этим он не производит никаких ошибок .......