【问题标题】:How do I use the JSONP datatype with Ember Data?如何将 JSONP 数据类型与 Ember 数据一起使用?
【发布时间】:2014-02-09 02:35:46
【问题描述】:

如何设置 Ember Data 在进行 ajax 调用时使用 JSONP 数据类型?我打算将 Ember 与 Phonegap 一起使用,并且需要发出跨域请求。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    重写私有ajaxOptions 函数比使用jQuery 更容易。无论如何,Ember 的管道包括删除 jQuery 依赖项。所以改为这样做:

    adapters/application.js:

    import DS from 'ember-data';
    
    export default DS.RESTAdapter.extend({
        ajaxOptions: function(url, type, options) {
            var hash = this._super(url, type, options);
            hash.dataType = "jsonp";
            return hash;
        }
    });
    

    如果 Ember 核心团队可以公开一个公共方法来正式支持这一点(而不是破解私有 api),那么它将被创建。

    https://github.com/emberjs/data/blob/1.0.0-beta.15/packages/ember-data/lib/adapters/rest_adapter.js#L915

    【讨论】:

    • 这绝对是更好的答案
    【解决方案2】:

    您需要创建自己的使用 jsonp 的适配器,您可以通过扩展当前的适配器来做到这一点,看看。

    App.MyAdapter= DS.RESTAdapter.extend({})
    

    然后你需要实现find方法等,使用jsonp,可能是这样的

    App.MyAdapter= DS.RESTAdapter.extend({
      find: function(store, type, id) {
         var item;
         $.ajax({
          url: 'http://api.domain/someModel',
          dataType: 'jsonp',
          success: function(response){
            item = App.someModel.create(order))
          }
        });
        return item;
      },
    

    这没有经过测试,但它应该让您了解如何完成。 :)

    【讨论】:

    • 这行得通,因为在 Ember-Data 中只有一种方法需要定义 dataType。
    • 我在执行此操作时发现的另一件事是,Phonegap 不需要使用 JSONP,只需在 config.xml 中设置域可访问性。
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多