如果将ReactiveVar
存储在Session
中,然后读取它,则会看到ReactiveVar
转换为对象。
var v = new ReactiveVar(4)
Session.set("v", v)
Session.get("v") //Object {curValue: 4, dep: Object}
我不能再
get
或set
它,因为它是一个普通的对象。有人知道这一点吗?
PS:另一个
ReactiveVar
中的ReactiveVar
效果很好 最佳答案
Session
是global 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
。