【问题标题】:Can we set cursor as a session variable?我们可以将光标设置为会话变量吗?
【发布时间】:2014-03-14 15:13:15
【问题描述】:

我尝试将光标设置为会话变量,看起来它不起作用。

有人知道吗??

我的代码:

 Meteor.call('apiresult',function(e,result)
    {                                               
    console.log(result);
    Session.set("object",result)                                                                                                        
    }); 

//getting variable
 var abc=Session.get("object");
return abc.skimlinksProductAPI.numFound;        

好像不行

【问题讨论】:

  • 方法结果和会话变量应该是 EJSON 兼容的类型。在此处阅读 EJSON:docs.meteor.com/#ejson
  • 我的结果仍然是 JSON 类型,为什么它不起作用
  • 游标不支持 EJSON。默认情况下,EJSON 支持的唯一类型是原语(字符串、布尔值、数字)、基本的非类型化对象字面量、数组,以及 Meteor 团队使 EJSON 兼容的少数类型化对象 - Date,二进制类型,如 @987654324 @ 和 Meteor.Collection.ObjectID。游标、HTMLElements、jQuery 对象等其他类型不支持 EJSON,因此它们不能用作方法的参数/返回值,也不能存储在 Session 变量中。相反,它们将作为基本 JSON 对象发送,没有任何类型信息(原型、构造函数、方法)
  • @sasikanth 游标没有 EJSON 类型,因此无法转换为 EJSON。

标签: javascript meteor


【解决方案1】:

游标可以实际上存储在Session... 有时。打开leaderboard app 并在浏览器控制台中尝试:

> Session.set('mycursor', Players.find());
未定义
> Session.get('mycursor')
LocalCollection.Cursor {collection: LocalCollection, selector_f: function, sort_f: null, skip: undefined, limit: undefined…}
> Session.get('mycursor').fetch()
[对象,对象,对象,对象,对象]

现在下载code of the leaderboard example app,使用最新的 Meteor,并在浏览器控制台中执行相同的操作。你可能会得到:

故事的寓意似乎是,不要将光标存储在会话变量中。将the Minimongo selector and optionssortfields 等)存储为对象。

【讨论】:

    【解决方案2】:

    有趣的想法。但它不是必需的,因为游标已经是反应性的。您可以将光标存储在普通变量中。

    需要指出的一点是,您不能使用Meteor.call 向下发送光标,您可以向下发送 javascript 对象或指定您自己的 EJSON,但您不能使用光标执行此操作。

    因此,如果您在本地执行 .find(),则可以将光标存储在全局变量中,但您不能在服务器上执行此操作,然后使用 Meteor.call 传输光标

    您可以为此使用发布/订阅功能。

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2021-12-14
      • 2011-11-27
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      相关资源
      最近更新 更多