使用Ember Data RESTAdapter端口

时间:2013-08-27 22:36:34

标签: ember.js ember-data

我修改了bloggr-client示例应用程序以从localhost的休息界面读取:8080 / api

App.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.RESTAdapter.extend({
    url: 'localhost:8080/api';})    });

我也在使用

<script src="js/libs/jquery-1.9.1.js"></script> 
<script src="js/libs/handlebars-1.0.0.js"></script>
<script src="js/libs/ember-1.0.0-rc.7.js"></script>
<script src="js/libs/ember-data-master.js"></script>

在firefox中,我收到以下javascript错误:

ember-1.0.0.rc.7.js中的第113行  //使用新错误时,我们无法对Chrome进行参数检查。欢迎替代方案  尝试{失败 .fail(); } catch(e){error = e; }

在Chrome中,

适配器没有返回数据,但我在jQuery的第8526行得到了一个选项错误

这是查询的结果。也许反斜杠或引号会杀死适配器。我可以用序列化器解决这个问题吗?

query: localhost:8080/api/posts

"[{\"user\": \"joe\", \"update_time\": \"2013-08-25 23:15:03.011767\", \"create_time\":        \"2013-08-25 23:05:45.405645\", \"slug\": \"apple\", \"title\": \"apple\"}, {\"user\": \"bill\", \"update_time\": \"2013-08-26 00:38:36.713749\", \"create_time\": \"2013-08-26 00:37:04.935824\", \"slug\": \"orange-id\", \"title\": \"orange\"}]"

最新消息,这修复了错误消息。我现在用反斜杠从服务器获取数据,但是ember数据忽略了它。串行器能解决这个问题吗?

App.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.RESTAdapter.extend({
    bulkCommit: false, 
    url: "http://localhost:8080/api/medbook",
    primary_key: "user",
    ajax: function (url, type, hash) {
        hash.url = url;
        hash.type = type;
        hash.dataType = 'jsonp';
        hash.contentType = 'application/json; charset=utf-8';
        hash.context = this;

        if (hash.data && type !== 'GET') {
            hash.data = JSON.stringify(hash.data);
        }

        jQuery.ajax(hash);
        },
  })
});

1 个答案:

答案 0 :(得分:0)

序列化程序似乎不是问题。您包含的自定义适配器代码未在传递给jQuery.ajax的哈希上定义成功或失败属性。结果,请求被发送到服务器,但它的响应被忽略。

您的自定义适配器需要一个类似于内置的ajax方法 - 使用该代码作为起点,然后根据需要进行自定义。

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.js#L475

  ajax: function(url, type, hash) {
    var adapter = this;

    return new Ember.RSVP.Promise(function(resolve, reject) {
      hash = hash || {};
      hash.url = url;
      hash.type = type;
      hash.dataType = 'json';
      hash.context = adapter;

      if (hash.data && type !== 'GET') {
        hash.contentType = 'application/json; charset=utf-8';
        hash.data = JSON.stringify(hash.data);
      }

      if (adapter.headers !== undefined) {
        var headers = adapter.headers;
        hash.beforeSend = function (xhr) {
          Ember.keys(headers).forEach(function(key) {
            xhr.setRequestHeader(key, headers[key]);
          });
        };
      }

      hash.success = function(json) {
        Ember.run(null, resolve, json);
      };

      hash.error = function(jqXHR, textStatus, errorThrown) {
        if (jqXHR) {
          jqXHR.then = null;
        }

        Ember.run(null, reject, jqXHR);
      };

      Ember.$.ajax(hash);
    });
  },