1

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

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

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

4

1 回答 1

2

我想知道最佳实践是什么...

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

通过 WebView 的 Android 应用程序......在这种情况下,在 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 这里是我们讨论过的其他一些方法的链接:

于 2013-05-01T23:30:29.063 回答