1

我通常在这里寻找答案,但我最终到了找不到好的答案的地步。

我正在寻找构建一个 ember 应用程序,该应用程序最初仅加载启动和打开主要路线所需的东西。当触发特定路由时,所有其他控制器、视图、模板等都会延迟加载。

我在这里找到了一个很好的例子来说明如何做到这一点:http: //madhatted.com/2013/6/29/lazy-loading-with-ember

我的主要问题是确定哪些构建工具支持这种延迟加载应用程序代码的理论?到目前为止,我已经看到 Brunch、Yeoman 和 Ember App Kit 似乎缩小并连接了所有脚本和模板。我对缩小感到非常满意,但需要将这些文件分开。我曾考虑将这段代码放入 app/assets 位置,以便在没有 concat 的情况下复制它,但它不会被缩小。

有没有人有办法解决吗?谢谢!

4

2 回答 2

1

您可以通过将以下内容添加到您的早午餐配置中来使用早午餐来做到这一点

files: {
    javascripts: {
        joinTo: {
            'javascripts/app.js': /^app(\/|\\)(?!admin)/, // concat everything in app, except /app/admin
            'javascripts/vendor.js': /^vendor/,
            'javascripts/admin.js': /^app(\/|\\)admin/ // concat only /app/admin
        }
    }
}

Grunt(用于 yeoman 和 ember 应用套件)非常灵活,所以我相信您可以通过深入研究 Gruntfile.js 来设置相同的东西

于 2013-12-13T09:49:15.800 回答
-1

问题是:“我正在寻找构建一个 ember 应用程序,它最初只加载启动和打开主路由所需的东西。所有其他控制器、视图、模板等将在特定路由时延迟加载被触发。”。

当页面加载时,Ember 期望在那里有它需要的任何东西。我不会错的,但是延迟加载路由似乎不是 Ember 的一个特性。Ember CLI 也是如此。它使用捆绑和缩小来减少过载。但一切都应该在那里让它发挥作用。

相反,像我这样的人只想在需要时才加载东西。

当你尝试在 Ember 中实现延迟加载时,一切都应该由一个模块(file.js)表示:一个路由,一个模块;一个控制器,一个模块;等等。您应该遵循一个模式(如 POD),该模式应用一种机制来查找它们应该在的位置。每个模块都应该知道它的依赖关系。但其中一些非常频繁(路由、控制器、模板)。您应该为浏览器使用模块加载器。它可以是 requirejs 或任何你喜欢的。但是 ES6 就在眼前。让我们考虑一下。

许多人使用beforeModel钩子来达到一个结果。我做到了,如果你不使用link-to组件,它就可以工作。否则一切都会崩溃。为什么?因为href计算属性。link-to插入a后,将href为其计算 an。因此,Ember 会查找链接指向的路线。如果路由不存在,则从route:basic.

一个解决方案可能是预加载页面中插入的所有链接所代表的所有路由。太贵了!

可以在 Ember.js 中的延迟加载路由定义中找到对此答案的集成

有关延迟加载 POD 中组织的路由的初始解决方案,请查看https://github.com/ricottatosta/ember-wiz。它是一种基于 ES6 的方法,它以 SystemJS 作为模块加载器。

于 2015-12-24T12:54:55.680 回答