【问题标题】:EXT JS Store's Proxy: readers and writersEXT JS Store 的代理:readers 和 writers
【发布时间】:2012-01-08 18:00:48
【问题描述】:

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

var store = Ext.create('Ext.data.Store', { 自动加载:真, 型号:“用户”, 代理: { 类型:'ajax', 网址:'users.json', 读者:{ 类型:'json', 根:'用户' } } });

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

【问题讨论】:

    标签: javascript jquery html extjs extjs4


    【解决方案1】:

    这是我的应用程序中带有 reader、writer 和 api 的 store 示例:

    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');
            }
        }
    });
    

    【讨论】:

    • autosync=false 时不会触发“Write”事件。这是预期的行为还是错误?
    • 已修复:当我使用 Session 时,需要 store.sync() 来触发事件
    【解决方案2】:

    其实你是对的 - 它将使用与 reader 相同的 url。

    代理是客户端上的模型/存储与另一端的服务器代码之间的中介。 读取器用于读取数据,您可以配置格式、指定根等内容。写入器负责对服务器的保存/更新请求。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2013-05-06
      • 2019-09-09
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多