javascript - 使用 Blaze.render + Blaze.view 或 Blaze.with 以编程方式将变量插入到 Meteor 模板中

标签 javascript meteor meteor-blaze

我正在尝试弄清楚如何使用 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/

相关文章:

javascript - 如何让你的表在 IE6/7 中不出现 "flexing"

javascript - 字符串文字和字符串之间有什么区别?

javascript - 如果事件没有发生,替代操作 javascript/jquery

mongodb - Meteor:通过_id从集合中查找对象

qunit - meteor 与 QUnit

meteor - 需要帮助请 : Meteor and Famous integration and creation of forms

Meteor.js/spacebars - 为什么使用参数/变量调用模板时数据上下文会发生变化?

javascript - HTML5 - 检查是否允许自动播放

javascript - 没有 MongoDB 的 Meteor Mysql 和 Session

javascript - 添加访问指定FlowRouter路由时的密码提示