2013-08-01 65 views
9

我使用require.js为JavaScript应用程序执行延迟加载。我很想切换到流星堆,但现在看起来Meteor会在初始加载时发送整个应用程序(所有模板)。有没有人有require.js和流星或任何其他实现的成功?流星中的惰性加载模板

回答

5

你在问不同的问题,但当然他们是连接的。首先是关于将额外的javascript代码加载到您的流星应用程序中。当然你可以使用像requirejs这样的东西。这应该工作得很好,假设您的懒惰代码位于您的流星项目的public目录中。不过,我的经验是,当public的内容经常更新时,requirejs会变得疯狂,例如在开发环境中。也许这是自定义库的问题,但我宁愿推荐使用一些轻量级的自制软件包。看看here,如果你需要一些灵感。

第二个问题是关于懒惰模板的定义。每个模板由两部分组成。首先是它html代码,写在handlebars语法,第二个是所有你写来定义您的模板应该如何行为(例如助手,事件处理程序)的的javascript代码。第二部分很简单,只要我们假设我们已经知道如何加载惰性代码(参见上面的段落)和模板,我们称它为myLazyTemplate,已经定义好了,所以基本上Template.myLazyTemplate不是undefined。那么如何实现后者?

要动态定义新模板,您需要在客户端上调用 Template.__define__(name, raw_func) 。所以最后一个问题是“什么是raw_func?”。这是一个编译版本的广告HTML代码通常是在服务器上自动创建,然后当应用程序被加载派下来的电线到客户端(看here,看看它是如何在流星完成)。但我们想动态地做到这一点,对吧?

这样的想法是与Handlebars.to_json_ast程序的帮助下手动编译模板代码。你可以用你的模板HTML代码喂它,输出一些的JavaScript阵列可以通过我们已经谈过的方法随时发送到客户端。您需要做的最后一件事是在客户端上调用Handlebars.json_ast_to_func,使用从服务器发送的数据作为唯一参数。 Handlebars.json_ast_to_func生成的输出是您可以用来生成myLazyTemplate模板的raw_func

我知道这只是一个粗略的想法,而不是整个解决方案。我希望这会帮助你自己找出最终的解决方案。

+0

感谢您提供非常详细的答案,这只是我正在寻找的描述级别。 – James

+1

这个答案可能已经过时了。请参阅2015年2月发布的[如何在Meteor中按需延迟加载模板](https://stackoverflow.com/a/28334315/1269037)以及可用的包。 –