有没有办法在会话变量发生变化时读取会话变量而无需重新渲染模板?
场景:
我使用 jQuery 动态更改元素的样式,但是当创建新元素时,我想设置其默认样式(我知道在渲染元素时我可以调用相同的 jQuery 命令)
Example:
<template name="image">
<!-- How can I avoid -height- being reactive -->
<img src="img.jpg" style="height: {{height}}">
</template>
Templates.image.height = function() {
return Session.get("height");
};
Templates.controls.events = {
'click #btn': function() {
// Change the height of all exiting images
$("img").css({height: Session.get("height")});
}
};
我希望添加的每个新图像都将高度存储在会话变量中,而无需重新渲染img
。我能想到的所有解决方案都感觉像是黑客。
会话将其值存储在Session.keys
,但它们是序列化的。要反序列化它们,您可以使用parse
函数来自https://github.com/meteor/meteor/blob/master/packages/session/session.js https://github.com/meteor/meteor/blob/master/packages/session/session.js :
var parse = function (serialized) {
if (serialized === undefined || serialized === 'undefined')
return undefined;
return EJSON.parse(serialized);
};
然后,代替Session.get('key-name')
, do:
parse(Session.keys['key-name'])
。这应该做同样的事情Session.get
而不会使任何上下文无效。将所有这些放在一起,这是一种似乎有效的方法:
Session._parse = function (serialized) {
if (serialized === undefined || serialized === 'undefined')
return undefined;
return EJSON.parse(serialized);
};
Session.getNonReactive = function (key) {
var self = this;
return self._parse(self.keys[key]);
};
更新 2013 年 3 月 13 日:
Meteor 刚刚发布了 v0.5.8,并带来了新功能。这是执行此操作的新方法:
Session.getNonReactive = function (key) {
return Deps.nonreactive(function () { return Session.get(key); });
};
更新 15/2/2016Meter 目前已被弃用,但它仍然有效。使用Tracker
反而:
Session.getNonReactive = function (key) {
return Tracker.nonreactive(function () { return Session.get(key); });
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)