【问题标题】:Mapping a store to a proxy将商店映射到代理
【发布时间】:2013-07-24 00:45:48
【问题描述】:

所以我试图在 extjs 中配置一个读取“users.json”文件的 ajax 代理。我正在尝试将我的商店映射到 users.json 文件。这是我的商店:

Ext.define('AM.store.Users', {
    extend: 'Ext.data.Store',
    model: 'AM.model.User',
    fields: ['name', 'email']
}

这是我的 users.json 文件:

{
    success: true,
    users: [
        {name: 'Ed Hayes',              email: 'aaa'},
        {name: 'Tommy Gunz', email: 'tommy@sencha.com'},
        {name: 'Clay Banks',    email: 'clay@BoA.com'},
        {name: 'Billy Joe', email: 'billyJgeemail.com'},
        {name: 'James Bond', email: 'goldenGun@HQ.com'}
    ]
}

最后,我的模型:

Ext.define('AM.model.User', {
    extend: 'Ext.data.Model',
    fields: ['name', 'email'],
    proxy: {
        type: 'ajax',
        url : 'data/users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});

// Uses the User Model's Proxy
Ext.create('Ext.data.Store', {
    model: 'AM.model.User'
});

现在它似乎不起作用。有没有办法做到这一点? (这是我应该做的事情吗?)

【问题讨论】:

  • “它不起作用”是什么意思?您使用什么代码尝试访问数据,出现什么症状?
  • 以下任何答案对您有用吗?如果没有,您可以发布您的解决方案并将其标记为答案吗?否则,我将删除我的答案。
  • 我相信这会起作用,但我这边有一些客户端/服务器问题。

标签: javascript extjs model proxy store


【解决方案1】:

您想在商店中设置代理,而不是在您的案例中设置模型。另外,我不确定您设置模型的方式是否可行,以下是我设置模型和存储问题的方式:

Ext.define("AM.store.User", {
    extend: "Ext.data.Model",
    fields: [
        {name:"name",  type:"string"},
        {name:"email", type:"string"}
    ]
});

// Uses the User Model's Proxy
var myStore = Ext.create('Ext.data.Store', {
    model: 'AM.store.User',
    proxy: {
        type: 'ajax',
        url : 'data/users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    },
    autoLoad: true
});

【讨论】:

  • 另外,我认为实际上你需要将商店保存到一个变量中才能有用。不确定您是否将其排除在示例之外。
  • 一个商店将继承其模型的代理,所以没关系。字段的默认类型是字符串,所以如果你忽略它也没关系。你不需要把它保存到一个变量中,你可以直接把它放在一个网格中。
【解决方案2】:
  1. 在您的store 中使用model 属性,或者使用fields 属性。不要同时使用。

  2. 您不需要 json 中的 success 属性(您只需要某些 extjs 表单操作)

  3. 既然已经声明了自己的商店类型,为什么还要使用模型创建默认商店?

  4. 您可以将proxy 放入storemodelstore 将继承其modelproxy,如果它没有的话。

【讨论】:

    【解决方案3】:

    您想在商店中设置代理 您可以通过此过程映射您的商店。 这里是代码。

    Ext.create('Ext.data.Store', {
        model     : 'AM.store.User',
        idProperty: 'id',
        autoLoad  : false,
        autoSync  : true,
    
        remoteSort: true,
        pageSize  : 10,
        proxy: {
            type    : 'ajax',
            noCache : false,
            limitParam: 'limit',
            startParam: 'start',
            url : 'data/users.json',
            actionMethods: {
                create  : 'POST',
                read    : 'GET',
                update  : 'PUT',
                destroy : 'DELETE'            
            },
            reader: {
                type            : 'json',
                root            : 'data',
                totalProperty   : 'total',
                successProperty : 'success',
                messageProperty : 'message',
                implicitIncludes: true
            },
            simpleSortMode  : true
        },
        sorters: [{
            property: 'id', 
            direction: 'asc'
        }]
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      相关资源
      最近更新 更多