javascript - 扩展 Ext.data.Store

标签 javascript extjs

这是父类(super class):

Ext.define('My.store.Direct', {
    extend: 'Ext.store.Direct',
    paramsAsHash: true,
    proxy: {
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'total'
        },
        type: 'direct',
    }
});

在子类中我只需要设置 API 配置。我尝试过:

Ext.define('My.store.User', {
        extend: 'My.store.Direct',
        model: 'My.model.User',
        storeId: 'user',
        constructor: function () {
            this.callParent(arguments);
            this.getProxy().api.read = RPC.UserApi.read;
        }}
);

Ext.define('My.store.Post', {
        extend: 'My.store.Direct',
        model: 'Mehr.model.Post',
        storeId: 'post',
        constructor: function () {
            this.callParent(arguments);
            this.getProxy().api.read = RPC.PostApi.read;
        }}
);

不幸的是,执行代码后,两个存储都将拥有第一个子类的api.read。这有什么问题吗?延长行程的正确方法是什么?

最佳答案

在构造函数中创建代理,否则代理将转到 My.store.Direct 的原型(prototype),并且因为它是一个对象,而不是基本类型(int、string、bool),所以可以访问它引用。因此,更改一个实例中的代理会更改所有实例 - 事实上只有一个代理。

所以基类的定义应该与此类似

Ext.define('My.store.Direct', {
    extend: 'Ext.data.DirectStore',
    paramsAsHash: true,
    constructor:function(config) {
      Ext.merge(config, {proxy: {
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'total'
        },
        type: 'direct'
    }
    });
        this.callParent([config]);
    }
});

关于javascript - 扩展 Ext.data.Store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23837167/

相关文章:

javascript - 如何获取store.sync()的返回消息;

javascript - 数组组合重复值

javascript - D3 Topojson 圆,半径以英里为单位

javascript - 我如何管理这个背景图像和类(class)的悬停行为?

javascript - 使用 (number, number) 创建 javascript 对象

javascript - 正则表达式匹配有效的整数或小数(可以是正数或负数)

javascript - ExtJS 从右到左

javascript - 网格面板中的动态单元格编辑器

javascript - 想要一个按钮在用户点击时改变颜色和改变文本

javascript - 数组中最小的数及其位置