Пользовательские прокси в магазинах и моделях кажутся несовместимыми (и не работают на моделях) - PullRequest
6 голосов
/ 06 августа 2011

Я использую Extjs 4 и создал собственный прокси-сервер Rest для обработки связи с моим Zend backend 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 Ответ

3 голосов
/ 10 февраля 2012

Используя ваше определение прокси, мне удалось заставить его работать. Я не уверен, почему это не работает для вас. Я только переместил 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> */
    });
});

Здесь является рабочим образцом, а здесь почтовым индексом.

...