如何在路由或控制器中访问RESTAdapter的主机和命​​名空间?

Joe*_*e B 16 ember.js ember-data

我在一些控制器和路由中使用了一些自定义的AJAX请求,例如:

 var loginRoute = Ember.Route.extend({

   actions: {

     submitLogin: function(user, pass) {

       var data = { username: user, password: pass };

       Ember.$.post('http://192.168.2.10/api/v1/login', data).then();
     }

   }
 });
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在开发时我可能有一个不同的IP(例如更改路由器),我希望能够访问我在扩展RESTAdapter时定义的URL(主机+命名空间),这样我只需要更改host和/或namespace一次,而不是我做自定义ajax请求的每个地方.

 App.ApplicationAdapter = DS.RESTAdapter.extend({
   host: 'http://192.168.2.10',
   namespace: 'api/v1'
 });
Run Code Online (Sandbox Code Playgroud)

Joe*_*e B 26

事实证明,您可以通过商店访问适配器 this.store.adapterFor('application')

submitLogin方法可能如下所示:

 submitLogin: function(user, pass) {

   var data = { username: user, password: pass },
       host = this.store.adapterFor('application').get('host'),
       namespace = this.store.adapterFor('application').namespace,
       postUrl = [ host, namespace, 'login' ].join('/'); // http://192.168.2.10/api/v1/login

   Ember.$.post(postUrl, data).then();
 }
Run Code Online (Sandbox Code Playgroud)

  • 现在你需要注入商店。`store: Ember.inject.service('store')` 然后获取 `this.get('store').adapterFor(...)` (2认同)