如何在流星运行时编译新模板?

Posted

技术标签:

【中文标题】如何在流星运行时编译新模板?【英文标题】:How to compile new templates at runtime in meteor? 【发布时间】:2012-11-13 02:22:40 【问题描述】:

如何在运行时使用 Handlebars.js 在流星中编译新模板?

var source   = '<input type="text" value"title" />' ;    
var template = ***???***.compile(my_new_template, source);
var context = title: "My New Post", body: "This is my first post!"
Template.my_new_template.events(
  'click': function (e,sender) 
    var that=this;
  
);
var html = Template.my_new_template(context);
$('#workspace').append(html);

【问题讨论】:

【参考方案1】:

目前无法直接编译 Handlebars 字符串。 Meteor 包装了 Handlebars,只为 ast(抽象语法树)提供了编译方法,而不是直接提供字符串。但是,您可以提供自己的不是 Handlebars 函数的函数。它不是公共 API,但您可以通过这种方式创建 Meteor 模板(暂时,除非 API 更改):

var tmpl = Meteor._def_template("templateName", function ()  
    return "some html string"; 
);

0.6.5

var tmpl = Meteor.__define__("templateName", function ()  
    return "some html string"; 
);

因此,这将在 Template 命名空间中创建一个模板,并为您提供模板的所有良好 Meteor 功能(例如反应性、事件、地标等)。

您还可以通过观看 Spark(Meteor 的底层渲染引擎)上的这一系列截屏视频来了解幕后发生的事情。

http://www.eventedmind.com/posts/meteor-rendering-template-functions http://www.eventedmind.com/posts/meteor-introduction-to-rendering

【讨论】:

继 0.6.5 中的命名空间清理之后,此方法现在位于全局模板下,为 Template.__define__ 谢谢韦斯。从 0.6.5 开始,您是正确的。不过我不知道如何接受您的编辑,所以我自己做吧。

以上是关于如何在流星运行时编译新模板?的主要内容,如果未能解决你的问题,请参考以下文章

在更新流星模板后运行函数

是否可以通过alanning为角色添加角色:来自模板事件的流星角色?

本地数组更改时如何重新渲染流星火焰模板?

如何将主干视图连接到流星车把模板?

无法使 Angular 应用程序在流星模板中运行

编译原理运行时环境—什么是活动记录 活动记录与汇编代码的关系