我使用 require.js 为 Javascript 应用程序进行延迟加载。我很想切换到流星堆栈,但现在看起来流星在初始加载时会发送整个应用程序(所有模板)。有没有人在 require.js 和 meteor 或任何其他实现方面取得成功?
1 回答
你问的是不同的问题,但它们肯定是相互关联的。第一个是关于将额外的javascript代码加载到你的流星应用程序中。当然你可以使用类似requirejs
. 假设您的惰性代码位于流星项目的public
目录中,这应该可以正常工作。但是,我的经验是,当内容经常更新时会发疯,例如在开发环境中。也许这是自定义库的问题,但我宁愿推荐使用一些轻量级的自制包。看这里,如果你需要一些灵感。requirejs
public
第二个问题是关于惰性模板定义的。每个模板由两部分组成。第一个是它的html
代码,用handlebars
语法编写,第二个是您编写的所有javascript代码,用于定义模板的行为方式(例如帮助程序、事件处理程序)。第二部分很简单,只要我们假设我们已经知道如何加载惰性代码(参见上面的段落)并且模板,让我们调用它myLazyTemplate
,已经定义,所以基本上Template.myLazyTemplate
没有undefined
。那么如何实现后者呢?
要动态定义新模板,您需要
Template.__define__(name, raw_func)
在客户端上调用。所以最后一个问题是“什么是raw_func
?”。这是您的html代码的编译版本,通常在服务器上自动创建,然后在加载应用程序时通过线路发送到客户端(查看这里以了解它是如何在流星中完成的)。但我们想动态地做,对吧?
Handlebars.to_json_ast
所以想法是在例程的帮助下手动编译模板代码。你可以用你的模板html代码来提供它,输出是一些javascript数组,可以通过我们已经讨论过的方法随时发送到客户端。您需要做的最后一件事是调用Handlebars.json_ast_to_func
客户端,使用从服务器发送的数据作为唯一参数。生成的输出Handlebars.json_ast_to_func
是raw_func
您可以用来生成myLazyTemplate
模板的。
我知道这只是一个粗略的想法,而不是您问题的全部解决方案。我希望这将帮助您自己找出最终解决方案。