zend-framework - 商店和模型上的自定义代理似乎不一致(并且不适用于模型)

标签 zend-framework rest extjs extjs4

我正在使用 Extjs 4,并创建了一个自定义 Rest 代理来处理与我的 Zend 后端 api 的通信。
(见帖子 http://techfrere.blogspot.com/2011/08/linking-extjs4-to-zend-using-rest.html)

当使用 Store 处理通信时,我使用 Ext.require 加载代理,然后在类型字段上引用代理,一切都很好,它加载了我的数据:按照:

Ext.require('App.utils.ZendRest');
...
proxy   : {
    type  : 'zest',              // My custom proxy alias
    url   : '/admin/user'
    ...
}

然后我决定尝试直接在模型上使用代理......但没有运气。上面的逻辑是行不通的。
问题
1.在引用zest时,没有找到之前加载的ZendRest类(别名为proxy.zest)
2. 它尝试从 App.proxy.zest(不存在)加载缺失的类。
所以我尝试将我的类(class)移动到这个位置并重命名为它似乎想要的。没运气。
它加载了类,但仍然没有初始化应用程序......我在任何地方都没有错误,所以很难弄清楚问题出在哪里......

现在看来我将不得不恢复使用我的 Zend Rest 代理始终通过 Store。

问题是……有没有其他人看到过这种行为?这是一个错误,还是我错过了什么?

谢谢...

最佳答案

使用您的代理定义,我已设法使其工作。
我不确定为什么它对你不起作用。我才搬家ZendRestPrj.proxy命名空间并添加 requires: ['Prj.proxy.ZendRest']到模型。

代码:

// controller/Primary.js
Ext.define('Prj.controller.Primary', {
    extend: 'Ext.app.Controller',
    stores: ['Articles'],
    models: ['Article'],
    views: ['article.Grid']
});

// model/Article.js
Ext.define('Prj.model.Article', {
    extend: 'Ext.data.Model',
    fields: [
        'title', 'author', {
            name: 'pubDate',
            type: 'date'
        }, 'link', 'description', 'content'
    ],
    requires: ['Prj.proxy.ZendRest'],
    proxy: {
        type: 'zest',
        url: 'feed-proxy.php'
    }
});


// store/Articles.js
Ext.define('Prj.store.Articles', {
    extend: 'Ext.data.Store',
    autoLoad: true,
    model: 'Prj.model.Article'
});

// proxy/ZendRest.js
Ext.define('Prj.proxy.ZendRest', {
    extend: 'Ext.data.proxy.Ajax',
    alias : 'proxy.zest',
    appendId: true,
    batchActions: false,
    buildUrl: function(request) {
        var me        = this,
            operation = request.operation,
            records   = operation.records || [],
            record    = records[0],
            format    = me.format,
            reqParams = request.params,
            url       = me.getUrl(request),
            id        = record ? record.getId() : operation.id;

        if (me.appendId && id) {
            if (!url.match(/\/$/)) {
                url += '/';
            }

            url += 'id/' + id;
        }

        if (format) {
            reqParams['format'] = format;
        }
        /* <for example purpose> */
        //request.url = url;
        /* </for example purpose> */
        return me.callParent(arguments);
    }

}, function() {
    Ext.apply(this.prototype, {
        actionMethods: {
            create : 'POST',
            read   : 'GET',
            update : 'PUT',
            destroy: 'DELETE'
        },
        /* <for example purpose> */
        reader: {
            type: 'xml',
            record: 'item'
        }
        /* </for example purpose> */
    });
});

Here是工作样本,和 here压缩代码。

关于zend-framework - 商店和模型上的自定义代理似乎不一致(并且不适用于模型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6966960/

相关文章:

php - 在不丢失元素的默认输入过滤器规范的情况下不需要 zend2 设置字段

java - 如何从 Jersey 响应中保存文件?

node.js - 使用 Azure AD 承载 token 时身份验证失败,无法返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]

javascript - 检测用户是否在以编程方式调用的打印对话框上按下了 "Print"

javascript - 如何在 ExtJS 上使用多个 gridfilter 类型?

php - ZFCUser 登录后重定向到自定义 URL

php - 我如何在 Zend_Db_Select where() 子句中使用问号 '?'?

php - 让这个类符合依赖倒置原则

spring-boot - Spring RetryTemplate 仅对特定类型的响应执行重试(而不是对异常)

javascript - 由于本地存储代理,Extjs 网格面板最多显示 25 行。如何改变这个极限值呢?