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