我正在尝试弄清楚如何使用 Blaze API 以编程方式将变量助手插入到模板中。我相信这需要使用某种形式来完成:
Blaze.render(Blaze.with('variable', contentFunction);
但是,我正在努力让 contentFunction 正常工作。我尝试了一个返回 session 变量的函数:
var session_var = function() {
return Session.get('myVariable');
};
但是,我不断收到未定义的错误。我知道如果我定义一个单独的要渲染的模板就可以做到这一点,但这对于这种特殊情况来说似乎有点太多了。我想知道是否有人可以解释 Blaze.with 和 Blaze.view 的工作原理。另外,是否可以以编程方式仅将变量助手插入模板中?
最佳答案
在不确切知道您要做什么的情况下,不清楚这是否是解决问题的最简单方法。
但是,如果你看 the docs ,您将看到可以在数据上下文中提供 session 变量并使用 Blaze.With,或者不提供数据上下文并使用 Blaze.View (其中似乎正是您想要的)。
因此,如果您想呈现响应式(Reactive)数据上下文,则必须在 Blaze.With 的第一个参数中提供它。尝试这样的事情:
var myView = Blaze.With(
function() {
return {
foo: Session.get('foo')
};
},
function() {
return Spacebars.mustache([
'the value of foo is ',
this.lookup('foo')
]);
}
);
Blaze.render(myView, document.body); // or whatever element you want to render it inside
或者,对于Blaze.View:
var myView = Blaze.View(
function() {
return 'the value of foo is ' + Session.get('foo');
}
);
Blaze.render(myView, document.body);
说实话,了解可渲染内容结构的最简单方法(如果您以编程方式执行此操作,这是困难的一点)是研究 Spacebars 编译器生成的内容。换句话说,找到一个从准 HTML 生成的有趣模板/子模板,从中选择一个元素并运行 Blaze.getView([ELEMENT])._render
,然后研究结果.
关于javascript - 使用 Blaze.render + Blaze.view 或 Blaze.with 以编程方式将变量插入到 Meteor 模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28278338/