这有点棘手。但是有些事情你可以做。这可能不是最好的方法,但它可以帮助你以某种方式开始。
Meteor 使用许多包作为“默认”构建,有时不需要一些包。您可以删除standard-app-packages
并添加此处列出的包(您需要并手动使用):https ://github.com/meteor/meteor/blob/devel/packages/standard-app-packages/package.js
要减少模板,您必须包含您使用的裸模板并单独包含其他模板,并且可能通过集合发送模板信息,使用实时观察者句柄来启动模板
您必须在服务器端“渲染”模板,或者使用Spacebars.compile
from the spacebars-compiler
package 手动将它们存储在您的集合中,这有点棘手,但您可以做得很好:
这应该给你一个粗略的想法,但不确定如何通过它的“评估”位:
/private/template.html 中的 HTML 文件
<template name="test">
Hello {{name}}
</template>
/private/template.js 中的 JS 文件
Template.test.name = function() { return "Bob" }
服务器端代码
var collection = new Meteor.Collection("templates");
var templateData = Assets.getText("template.html");
var templateJs = Assets.getText("template.js");
var compiled = Spacebars.compile(templateData).toString();
var jsData = templateJs;
collection.insert({templateName:"test", data: templateData, js: templateJs});
客户端代码
collection.find().observeChanges({
added: function(id, fields) {
var template = fields.data,
name = fields.name,
js = fields.js;
Template["name"] = UI.Component.extend({
kind: "name",
render: eval(template),
});
eval(js);
}
});
然后只需订阅要求您的模板的集合,它应该存在。如果您使用iron-router
我认为(不确定),您可以在模板呈现之前让订阅等待,这样您就可以让它工作。
同样,这只是一个“hacky”解决方案,我个人不喜欢它的一件事是使用eval
,但是 javascript 需要以某种方式运行......
您也可以循环使用特定文件夹中的文件fs = Npm.require('fs')
来呈现每个模板。
一种替代方法是注入一个“脚本”标签,调用已编译的 js 模板和模板助手以让模板存在。