是否可以在 extjs 商店中使用自定义变量?

问题描述 投票:0回答:1

目前我正在开发一个使用ExtJs(版本5.0.1)的项目。 现在,由于我经常创建商店,所以我想创建某种模板来复制甚至扩展。

所以我很烦恼每次都要编辑路径并在上面创建变量

let controller
(在我使用const之前,但由于调用了多个商店,所以最终出现了一些错误)

let controller = "path/to/my/controller/myController.php";

Ext.define("xxx.store.foo.bar.myStore", {
    extend: "Ext.data.Store",
    model: "xxx.model.foo.bar.myModel",
    proxy: {
        type: "ajax",
        timeout: 20000,
        api: {
            read: controller + "?data=read",
            create: controller + "?data=create",
            update: controller + "?data=update",
            destroy: controller + "?data=delete",
        },
        reader: {
            type: "json",
            rootProperty: "data",
            idProperty: "id",
            totalProperty: "total",
        },
        writer: {
            type: "json",
            encode: true,
            writeAllFields: true,
            rootProperty: "data",
            idProperty: "id",
        },
    },
    autoLoad: false,
});

但是,我对此并不满意,并且更喜欢一些内部变量。比如:

Ext.define("xxx.store.foo.bar.my", {
    extend: "Ext.data.Store",
    model: "xxx.model.foo.bar.my",
    myControllerPath: "this/is/my/path/to/my/controller",
    proxy: {
        type: "ajax",
        timeout: 20000,
        api: {
            read: this.myControllerPath + "?data=read",
            create: this.myControllerPath + "?data=create",
            update: this.myControllerPath + "?data=update",
            destroy: this.myControllerPath + "?data=delete",
        },
        ....

但是

this.
不能这样用! (显然)

我的问题的解决方案是什么...我如何在那里使用自定义变量?

ajax extjs extjs4 store
1个回答
0
投票

一种解决方案可能是将控制器路径的自定义属性添加到模板存储类定义,并使用

constructor
基于此路径设置代理。这样您就已经可以使用
this
关键字了。稍后您可以使用此模板来定义您的商店类别。

查看这段代码,希望对您有所帮助:

Ext.define("MyStoreTemplate", {
    extend: "Ext.data.Store",
    myController: null,
    constructor: function (config) {
        this.setProxy({
            type: "ajax",
            timeout: 20000,
            api: {
                read: this.myController + "?data=read",
                create: this.myController + "?data=create",
                update: this.myController + "?data=update",
                destroy: this.myController + "?data=delete",
            },
            reader: {
                type: "json",
                rootProperty: "data",
                idProperty: "id",
                totalProperty: "total",
            },
            writer: {
                type: "json",
                encode: true,
                writeAllFields: true,
                rootProperty: "data",
                idProperty: "id",
            },
        });
    },
    autoLoad: false,
});

Ext.define("MyModel", {
    extend: "Ext.data.Model",
});

Ext.define("MyStore", {
    extend: "MyStoreTemplate",
    myController: "path/to/my/controller/myController.php",
    model: "MyModel",
});

const myStore = Ext.create("MyStore");

console.log(myStore.getProxy());

© www.soinside.com 2019 - 2024. All rights reserved.