4

我有代码 ExtJs 4 :

var proxy = Ext.create('Ext.data.Proxy',  {
type : 'ajax',
    url : 'some url',
    reader : {
        type : 'json'
    }
});
myStore.setProxy(proxy);  
myStore.load({   // this never loads, no error in console either
    scope : this,
    params : {
    },
    callback: function() {
    }
});
4

2 回答 2

5

您的问题是您试图type在创建超类的具体实例时定义。type当您在像 a 这样的类的配置中定义代理时,这是一个有效的配置Ext.data.Model(在大多数情况下这是推荐的方式!)以下是应该如何完成的示例:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name', 'email']
});

//The Store contains the AjaxProxy as an inline configuration
var store = Ext.create('Ext.data.Store', {
    model: 'User',
    proxy: {
        type: 'ajax',
        url : 'users.json'
    }
});

store.load();

Store 现在将使用应用type属性(在本例中为 ajax)实例化代理。上面的代理行是一样的

new Ext.data.proxy.Ajax({
    url: 'users.json',
    model: 'User',
    reader: 'json'
});

type只要您在使用代理的类的配置中使用它,那么它就是有效的属性Ext.data.Model,例如Ext.data.Store

如果您需要自己创建代理实例,则需要创建具体实例。超类在API中记录了它们的直接子类

在此处输入图像描述

但如果读者没有帮助,因为你只找到Server&Client但它们列在类描述部分Types of Proxy

代理类型

代理有两种主要类型 - 客户端和服务器。客户端代理在本地保存他们的数据并包括以下子类:

  • LocalStorageProxy - 如果浏览器支持,则将其数据保存到 localStorage
  • SessionStorageProxy - 如果浏览器支持,则将其数据保存到 sessionStorage
  • MemoryProxy - 仅将数据保存在内存中,刷新页面时任何数据都会丢失

服务器代理通过向某个远程服务器发送请求来保存它们的数据。这些代理包括:

  • Ajax - 向同一域上的服务器发送请求
  • JsonP - 使用 JSON-P 向不同域的服务器发送请求
  • Rest - 使用 RESTful HTTP 方法 (GET/PUT/POST/DELETE) 与服务器通信
  • Direct - 使用 Ext.direct.Manager 发送请求

代理的操作原则是所有执行的操作都是创建、读取、更新或删除。这四个操作分别映射到create、read、update和destroy方法。每个 Proxy 子类都实现这些功能。

每个 CRUD 方法都需要一个 Operation 对象作为唯一的参数。Operation 封装了有关 Store 希望执行的操作、要修改的模型实例等信息。有关更多详细信息,请参阅 Operation 文档。每个 CRUD 方法还接受一个回调函数,以便在完成时异步调用。

代理还支持通过批处理方法调用的批处理对象对操作进行批处理。

可用时间:1.1.0

于 2013-07-03T06:01:36.563 回答
2

我尝试了您的代码并得到了您描述的相同结果:没有控制台错误,但也没有加载。据我所知,type不是 ExtJS 4.x 中代理的配置选项,但您可以Ext.data.proxy.Ajax直接实例化。这对我有用:

var proxy = Ext.create('Ext.data.proxy.Ajax',  {
    url : 'some url',
    reader : {
        type : 'json'
    }
});
于 2013-07-03T01:00:16.913 回答