在Ember教程应用程序中放置ajax请求的位置?

时间:2017-05-19 00:50:58

标签: ajax ember.js

我想将“天气:24C”添加到rental-listing tutorial appsuper-rentals组件中。

放置此ajax请求的“最佳做法”位置在哪里?

Ember.$.getJSON(`http://api.openweathermap.org/data/2.5/weather?q=${location}&APPID=${apiKey}`)
    .then(function(json) {
      return JSON.parse(json).main.temp;
  });

我是否需要添加组件,添加模型,添加服务,添加第二个适配器,修改现有适配器?别的什么?所有这些?本教程使用Mirage的问题是什么?我问这个,因为当我认为我越来越近时,我得到一个这样的错误:

Mirage: Your Ember app tried to GET
'http://api.openweathermap.org/data/2.5/weather?q=london&APPID=5432',
     but there was no route defined to handle this request.
     Define a route that matches this path in your
     mirage/config.js file. Did you forget to add your namespace?

1 个答案:

答案 0 :(得分:1)

您需要配置海市蜃楼以允许您在海市蜃楼活跃时拨打外部电话;我的意思是在this.passthrough中使用mirage/config.js函数,api documentation中对此进行了解释。

关于您在何处进行远程通话的问题;这取决于:

  • 如果您需要来自服务器的数据,以防路由即将开启;您应该更喜欢将其放在相应model的{​​{1}}钩子中。
  • 如果您打算开发一个可以在不同路径中重复使用的组件,甚至可以在不同的应用程序中重复使用相同的远程调用;你可以考虑将ajax远程调用放到组件上。即使这通常不是很常见的情况;可能是这样的情况:组件本身应该被包装起来以获取数据并自己显示它以便在不同的地方重用;没有什么可以阻止你这样做。然而,通常采用数据向下动作原则;通常,远程呼叫属于路由或控制器。
  • 是否使用route ember-data是另一回事。如果您打算使用model;您不应该直接使用ember-data而是使用Ember.$.ajax提供的store,并且可能会提供自定义适配器/序列化程序,以便在服务器的情况下将数据转换为格式ember-data接受与ember-data接受的格式不匹配。综上所述;如果你像在这个问题中那样使用纯粹的ajax,则不需要使用ember-data