【问题标题】:Best way to integrate Ember.js with external code (e.g., Android's WebView)将 Ember.js 与外部代码(例如 Android 的 WebView)集成的最佳方式
【发布时间】:2013-04-25 00:17:39
【问题描述】:

我想知道在开发 Ember.js 应用程序时,当它需要对外部代码(例如,通过 WebView 或其他超出范围的代码从 Android 应用程序调用)做出反应时,最佳实践是什么Ember 应用程序)。

在这种情况下,在 JavaScript 世界和 Java 世界之间有一个公共接口是必要的。该接口可能是一个封装对象,但它需要能够让 Ember.js 路由器做出反应以更改应用程序状态。这种用例在 Ember.js 中没有很好地定义。例如,AngularJS 通过提供服务(可能是我的接口)和依赖注入似乎在这方面做得更好。但是 Ember.js 提供了哪些机制来构建 App 和外部世界之间的外部接口?

当然可以进行一些黑客攻击(例如,使用 App.container),但我正在寻找一种与框架作者的愿景一致的方法。我的意思是......我不想选择一个框架并最终继续反对它。这就是为什么对于这个特定的项目,我正在考虑使用像 Backbone.js 这样不那么固执己见的框架。尽管从我对 Ember.js 的(非常非常小的)经验来看,我非常喜欢 if it 的整体组织。

【问题讨论】:

    标签: javascript ember.js integration


    【解决方案1】:

    我想知道最佳做法是什么...

    我不确定是否有任何一种连接外部代码的最佳实践。

    Android 应用程序通过 WebView....在这种情况下,在 JavaScript 世界和 Java 世界之间有一个公共接口是必要的。该接口可能是一个封装对象,但它需要能够让 Ember.js 路由器做出反应以更改应用程序状态

    有道理。曾经可以为此目的使用控制器单例。像任何其他控制器一样,它将能够访问路由器。它还可能连接到其他控制器以修改其状态。

    App.ApplicationRoute = Ember.Route.extend({
      setupController: function() {
        bridge = this.controllerFor('bridge');
        // This "works" but uses a global constant
        // Dependency Injection would be better, see below...
        ImaginaryJavaLibrary.sendStateChangesTo(bridge);
      }
    })
    
    App.BridgeController = Ember.Controller.extend({
      eventOne: function(data) {
        //react to state change, maybe call router.
      }
    })
    

    AngularJS 通过提供服务(可能是我的接口)和依赖注入似乎在这方面做得更好。但是 Ember.js 提供了哪些机制来构建 App 和外部世界之间的外部接口

    服务看起来很酷。 FWIW 我认为也许 AngularJS 在记录依赖注入方面做得更好,但可以肯定它也是 ember 的核心部分。查看这篇文章,了解如何将对象(如您的界面)注入 ember 应用程序。

    http://mcdowall.info/posts/ember-application-initializers/

    http://emberjs.com/api/classes/Ember.Application.html#method_register

    还可以查看这篇描述如何与 Pusher 集成的帖子 - 我认为这非常接近您想要做的:

    http://livsey.org/blog/2013/02/10/integrating-pusher-with-ember/

    FWIW 这里是我们讨论过的其他一些方法的链接:

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 2011-09-12
      • 2010-10-08
      • 2010-11-26
      • 2019-02-11
      • 2020-10-01
      • 2012-10-21
      • 2012-03-15
      相关资源
      最近更新 更多