使用动态参数加载存储

load store with dynamic param

我想根据我的树节点选择加载一条记录并将其显示在我的表单中。但是我的商店没有加载到我的控制器处理程序中。我应该在哪里以及如何使用我的参数加载商店?

        var me = this;
        var idTag= me.getMyNode();
        me.getTagStore().on('beforeload', function(store, operation, eOpts) {
            operation.params = {
                idTag: idTag
            };
        }, me);
        // it will not be loaded here and I get rec=undefined
        var rec = me.getTagStore().load().getAt(0);
        me.getMyForm().loadRecord(rec);

这是我的商店:

Ext.define('TTT.store.Tag', {
    extend: 'Ext.data.Store',
    requires: [
        'TTT.model.Tag'
    ],
    model: 'TTT.model.Tag',

    proxy: {
        type: 'ajax',
        url: 'tag/find.json',
        reader: {
            type: 'json',
            root: 'data'
        }
    }
    ,baseParams: {
        idTag: 30
    },
});

您可以在需要时手动调用加载方法并传递所需的任何参数,如下所示:

me.getTagStore().load({
    params: {
        idTag: idTag
    }
});

当您调用它时,您应该会在浏览器的控制台 window 中看到带有参数的请求。

在你上面的代码中,这一行:

// it will not be loaded here and I get rec=undefined
var rec = me.getTagStore().load().getAt(0);

加载操作需要一点时间,不多但确实需要一点时间。你需要在你的商店上监听加载事件才能做这样的事情,这里是一个例子:

me.getTagStore().load({
    params: {
        idTag: idTag
    },
    scope: this,
    callback: function(records, operation, success) {
        // the operation object
        // contains all of the details of the load operation
        console.log(records);
    }
});

查看 store 的文档。