编程语言
首页 > 编程语言> > Javascript-流星JS:处理游标时与流星JS不一致?

Javascript-流星JS:处理游标时与流星JS不一致?

作者:互联网

我想我可能在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);
}

然后使用模板助手中存储在会话中的对象:

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)

badSequenceError@http://localhost:3000/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:179:1
ObserveSequence.observe/computation</<@http://localhost:3000/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:144:1
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:593:12
ObserveSequence.observe/computation<@http://localhost:3000/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:121:7
Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:327:5
Tracker.Computation.prototype._recompute@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:346:9
Tracker._runFlush@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:485:9
onGlobalMessage@http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:372:11

哪个没有意义,因为我将MenuItems.find()的可接受返回值存储在Session中并进行检索…..检索后它仍应该是游标…..对吗???

这有什么解释???

为了强调使用会话存储值不会改变检索时存储的对象….我尝试了与上面相同的代码,但仅使用数组而不是游标…所以就是var snapshot = MenuItems.find() .取();而不是var snapshot = MenuItems.find();并且不会产生任何错误…….

解决方法:

在后台,Session是一个ReactiveDict.如果您查看source,您会看到它通过EJSON.stringify将其数据序列化.

如果您具有简单的对象和基元,则此方法很好用,但是序列化一个类实例将剥离其所有方法(功能未序列化).

这就解释了为什么存储提取(一个文档数组)的结果而不能存储查找(一个光标实例)的结果的原因.由于删除了游标的方法,因此它的行为不再像游标,并且空格键将无法迭代其文档.

标签:spacebars,mongodb,meteor,javascript
来源: https://codeday.me/bug/20191028/1952289.html