在模型中加载数据时实现自定义ajax调用

时间:2014-02-21 23:54:46

标签: ember.js

在我的Emberjs应用程序中,我有一个Employee模型,我应该通过REST Get API调用加载,我必须首先验证API以获取令牌,然后开始加载数据,我知道如何使用JQuery轻松完成此操作不知道如何在EmberJS中实现这一点,所以如果有人能指导我如何这样做,我将非常感激。

以下是我用于身份验证,提取员工数据以及我的EmberJS模型代码的JQuery代码

由于

验证

 $.ajax
  ({
    type: "POST",
    url: "http://portal.domainname.com/auth",
    dataType: 'json',
    async: false,
    data: JSON.stringify({ 
        Login: "logmein@email.com", 
        Password : "test"
    }),
    success: function(data) {
        console.log(data); //Here I get the token needed for further calls...
    },
    error: function(xhr, error){
        console.debug(xhr); console.debug(error);
    } 
});

要求加载员工数据:

$.ajax   ({
    type: "GET",
    url: "http://portal.domainname.com/employees",
    dataType: 'json',
    async: false,
    beforeSend: function (xhr) {
        xhr.setRequestHeader ("Token", "0000000-0000-0000-0000-00000000");
    },
    success: function(data) {
        console.log(data);
    },
    error: function(xhr, error){
        console.debug(xhr); console.debug(error);
    }  });

EmberJS模特

App.Store = DS.Store.extend({
  revision: 11
});

App.Employee = DS.Model.extend({
  employeeID:             DS.attr('string'),
  employeeName:        DS.attr('string')
});

App.Store.reopen({
 adapter: 'DS.RESTAdapter'
});

4 个答案:

答案 0 :(得分:3)

您可以向所有Ember AJAX请求添加标题,如下所示:

App.Store = DS.Store.extend({
  revision: 13,
  adapter: DS.RESTAdapter.extend({
    ajax: function(url, type, hash) {
      if (!hash) {
        hash = {};
      }
      hash.beforeSend = function(xhr) {
        xhr.setRequestHeader("Authorization", "Token " + window.sessionToken);
      };
      return this._super(url, type, hash);
    }
  })
});

我在生产中使用此代码。

答案 1 :(得分:1)

一个非常真实的&可行的解决方案是避免使用EmberData,只需按照您已知的方式使用ajax。从Discourse的创始人(使用Ember而不使用Ember数据)看一下本教程:

http://eviltrout.com/2013/03/23/ember-without-data.html

答案 2 :(得分:0)

作为一个黑客,您可以使用类似https://api.jquery.com/jQuery.ajaxPrefilter/之类的东西来为每个调用添加带有令牌的标头。但是,我认为您应该使用专用的auth库。

此外,您的商店有修订版:11 - 这是我认为的旧版本。

答案 3 :(得分:0)

尝试这样的事情:

App.ApplicationAdapter = DS.RESTAdapter.extend({
  setHeaders: function() {
    this.set('headers', { "Token": "0000000-0000-0000-0000-00000000" });
  }.on('init');
});

我认为你需要使用ember-data-1.0.0-beta.x才能正常工作。