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

时间:2011-08-06 13:05:30

标签: 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加载缺少的类(它不存在。)
所以我尝试将我的课程移到这个位置并重命名为它想要的东西。没有运气。
它加载了类,但仍然没有初始化应用程序...我在任何地方都没有错误,所以很难找出问题出在后面的位置......

现在似乎我将不得不通过商店恢复使用我的Zend Rest代理。

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

...谢谢

1 个答案:

答案 0 :(得分:3)

使用您的代理定义,我设法让它工作。 我不确定为什么它不适合你。我仅将ZendRest移至Prj.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压缩代码。