【问题标题】:How to create route-less substates in an ember.js 1.6.x如何在 ember.js 1.6.x 中创建无路由子状态
【发布时间】:2014-10-03 00:41:18
【问题描述】:

我想创建一个类似管理子应用程序的东西,它在我现有的 ember 1.6.x 应用程序的每个页面上都可用。它将拥有自己的状态机(路由器),允许它根据自己的状态加载不同的控制器/模板。我已经看到很多类似的讨论都围绕着拥有多个状态机(路由器)或广泛使用子路由,但没有什么真正击中头部。

是否有一种清晰的方法可以在同一页面上创建两个有效的 ember 应用程序?

子应用实际上不需要在 url 栏中解释路由。当父应用更改路由/状态时,它也不需要维护其状态。每次父应用更改为不同的路线时,都可以重置它。我要避免的是在父应用程序的多个控制器中一遍又一遍地重复相同的代码。我还想避免污染应用程序或全局级别。

以下是我研究过的讨论列表。我能找到的最有意义的事情是关于 ember flow 的工作(尚未完成)。还是我应该考虑通过 ember-states 插件为子应用创建一个新的状态机?

需要明确的是,我并不是在寻找为我编写代码的人。只是讨论如何使用当前可用的 ember 1.6.x 完成此操作。

http://discuss.emberjs.com/t/route-less-substates/2269

http://discuss.emberjs.com/t/is-there-a-reason-we-can-not-have-nested-routes/1845

Sending action to Ember.StateManager : is goToState mandatory?

https://github.com/emberjs/ember.js/issues/406

https://github.com/emberjs/ember.js/issues/4767

http://discuss.emberjs.com/t/concurrent-states-in-ember/5042

https://github.com/nathanhammond/ember-flows-generator

https://github.com/emberjs/ember.js/issues/406#issuecomment-3702356

【问题讨论】:

    标签: javascript ember.js ember-data url-routing


    【解决方案1】:

    您可以在另一个 Ember 应用中运行多个嵌入式隔离 Ember 应用。

    嵌入式 Ember 应用可以像任何其他应用一样操纵 URL 状态,或者您可以将其配置为具有 路由状态,但不与 URL 交互。

    看看embedding applications documentation

    摘录:

    App = Ember.Application.create({
      rootElement: '#app'
    });
    
    App.Router = Ember.Router.extend({
      location: 'none' // To disable manipulating URL
    });
    

    您还可以在应用之间共享代码。例如共享 Ember Data 模型。

    var MainApp     = Ember.Application.create({});
    var AdminApp    = Ember.Application.create({rootElement: '#admin-container'});
    
    AdminApp.Router = Ember.Router.extend({location: 'none'});
    
    MainApp.User    = DS.Model.extend({});
    AdminApp.User   = MainApp.User;
    

    【讨论】:

    • 我从来没有使用过这些答案中的任何一个,但这个答案是当时唯一真正可行的答案。如果有人知道如何让它在当今的 ember 生态系统中发挥作用,请发帖!
    • 我应该补充一点,我没有走这条路,因为我需要共享应用程序的大部分内部结构。拥有 2 个独立的应用程序同时会创建两个独立的路由器,这对我的用例来说有点过分了。我最终在主要的包罗万象的应用程序路线上创建了所有“子路线”。丑陋但有效。
    【解决方案2】:

    这可能是您正在寻找的:

    https://github.com/tildeio/conductor.js

    【讨论】:

      【解决方案3】:

      我想你可以使用 query-params 我没有完全了解你的用例,但请查看 http://instructure.github.io/ic-tabs/query-params.html#/?country=2&food=2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-09
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        相关资源
        最近更新 更多