如果将ReactiveVar存储在Session中,然后读取它,则会看到ReactiveVar转换为对象。

var v = new ReactiveVar(4)
Session.set("v", v)
Session.get("v") //Object {curValue: 4, dep: Object}


我不能再getset它,因为它是一个普通的对象。
有人知道这一点吗?

PS:另一个ReactiveVar中的ReactiveVar效果很好

最佳答案

Sessionglobal named ReactiveDict
所有的反应式字典都有一个非常有趣的功能:它们stringify可以存储您的数据。
他们这样做是为了例如在热代码推送之间存储它。

考虑以下代码:

var dict = new ReactiveDict()
dict.set('foo', { func : function() {} })
console.log(dict.get('foo'))


控制台将输出:


  Object { }


这是因为EJSON stringification(由Meteor定义)基于JSON stringification,这删除了对象方法和原型以严格保留数据。

如果要将来自ReactiveVar的无功值存储到Session中,则必须运行Tracker计算以执行此操作:

Tracer.autorun(
  () => Session.set('foo', foo.get())
)


如果要使用方法或已定义的原型来反应性存储对象,请使用ReactiveVar

10-06 14:40