如果我在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
内部效果很好
答案 0 :(得分:1)
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
。