使用 Blaze.render + Blaze.view 或 Blaze.with 以编程方式将变量插入 Meteor 模板
Programmatically insert variables into Meteor Templates with Blaze.render + Blaze.view or Blaze.with
我正在尝试弄清楚如何使用 Blaze API 以编程方式将变量助手插入到模板中。我相信它需要使用某种形式来完成:
Blaze.render(Blaze.with('variable', contentFunction);
但是,我正在努力让 contentFunction 正常工作。我尝试了一个 returns 会话变量的函数:
var session_var = function() {
return Session.get('myVariable');
};
但是,我不断收到未定义的错误。我知道如果我定义了一个单独的模板来渲染就可以做到这一点,但对于这个特殊情况来说这似乎有点过分了。我想知道是否有人可以解释 Blaze.with 和 Blaze.view 是如何工作的。另外,是否可以通过编程方式将变量助手插入到模板中?
在不知道您想要做什么的情况下,不清楚这是否是最简单的处理方式。
但是,如果您查看 the docs,您会发现您可以在数据上下文中提供会话变量并使用 Blaze.With , 或者不提供数据上下文并使用 Blaze.View 代替(这似乎是你想要的)。
因此,如果您想要呈现反应式数据上下文,则必须在 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 编译器生成的内容。换句话说,找到一个有趣的template/sub-template,它是由准HTML生成的,从中挑选一个元素运行 Blaze.getView([ELEMENT])._render
,然后研究结果[=14] =]
我正在尝试弄清楚如何使用 Blaze API 以编程方式将变量助手插入到模板中。我相信它需要使用某种形式来完成:
Blaze.render(Blaze.with('variable', contentFunction);
但是,我正在努力让 contentFunction 正常工作。我尝试了一个 returns 会话变量的函数:
var session_var = function() {
return Session.get('myVariable');
};
但是,我不断收到未定义的错误。我知道如果我定义了一个单独的模板来渲染就可以做到这一点,但对于这个特殊情况来说这似乎有点过分了。我想知道是否有人可以解释 Blaze.with 和 Blaze.view 是如何工作的。另外,是否可以通过编程方式将变量助手插入到模板中?
在不知道您想要做什么的情况下,不清楚这是否是最简单的处理方式。
但是,如果您查看 the docs,您会发现您可以在数据上下文中提供会话变量并使用 Blaze.With , 或者不提供数据上下文并使用 Blaze.View 代替(这似乎是你想要的)。
因此,如果您想要呈现反应式数据上下文,则必须在 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 编译器生成的内容。换句话说,找到一个有趣的template/sub-template,它是由准HTML生成的,从中挑选一个元素运行 Blaze.getView([ELEMENT])._render
,然后研究结果[=14] =]