EXT JS Store的代理:读者和作家

时间:2011-11-29 11:33:34

标签: javascript jquery html extjs extjs4

在文档中,我发现了一个实例化的商店:

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: "User",
    proxy: {
        type: 'ajax',
        url : 'users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});

代理有一个url个配置。我对读者特别感兴趣。阅读器指定数据交换格式(json)和根('用户')。现在,换句话说,如果商店设置为:autoLoad = true,那么EXT JS将与指定的URL建立Ajax连接以便read。现在,我如何为上面的同一个商店配置一个作家?有人还告诉我这个:如果我配置一个编写器,它会使用代理中指定的相同URL吗?我仍然对上面显示的代码的上下文中的作者和读者感到困惑,你会帮我用上面的例子来展示读者和作者的配置。谢谢。

2 个答案:

答案 0 :(得分:9)

以下是我的应用程序中包含reader,writer和api的商店示例:

Ext.define('MyApp.store.Tasks', {
    extend: 'Ext.data.Store',
    model: 'MyApp.model.Task',
    sorters : [{
       property: 'idx',
       direction: 'ASC'
    }],
    autoSync:true,
    proxy:{
        type: 'ajax',
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: {
            type: 'json',
            writeAllFields : false,  //just send changed fields
            allowSingle :false      //always wrap in an array
           // nameProperty: 'mapping'
       },
        api: {
               // read:
                create: 'task/bulkCreate.json',
                update: 'task/bulkUpdate.json'
               // destroy:
        }
    },
    listeners : {
        write: function(store, operation, opts){
            console.log('wrote!');
            //workaround to sync up store records with just completed operation
            Ext.each(operation.records, function(record){
                if (record.dirty) {
                    record.commit();
                }
            });
        },
        update:function(){
            console.log('tasks store updated');
        }
    }
});

答案 1 :(得分:2)

实际上你是对的 - 它会使用与读者相同的网址。

代理是客户端上的模型/商店与另一方的服务器代码之间的中介。 读者用于读取数据,您可以配置格式化,指定root等内容。编写者负责向服务器保存/更新请求。

查看此文章:http://edspencer.net/2011/02/proxies-extjs-4.html