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