将Ember.js与外部代码集成的最佳方式(例如,Android的WebView)

时间:2013-04-30 23:45:21

标签: javascript ember.js integration

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

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

当然可以制作一些黑客(例如,使用App。容器),但我正在寻找一种与框架作者的愿景一致的方式。我的意思是......我不想选择一个框架,最后继续与之作斗争。这就是为什么我正在考虑使用像Backbone.js这样不那么自以为是的框架。尽管从Ember.js的(非常非常小的)经历中我非常喜欢它的整体组织。

1 个答案:

答案 0 :(得分:2)

  

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

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

  

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这里是我们谈到的其他一些方法的链接: