Extjs ajax код рефакторинга - PullRequest
4 голосов
/ 31 января 2011

У меня такой вид кода ajax повторяется во многих местах. Как я могу реорганизовать это в один метод, чтобы он по-прежнему допускал различное поведение при успехе или неудаче.

Ext.Ajax.request({
    url : 'ajax.php' , 
    params : { action : 'getDate' },
    method: 'GET',
    success: function ( result, request ) { 
    Ext.MessageBox.alert('Success', 'Data return from the server: '+     result.responseText); 
    },
    failure: function ( result, request) {  Ext.MessageBox.alert('Failed', result.responseText); 
    } 
});

Ответы [ 3 ]

3 голосов
/ 31 января 2011
MyAjaxRequest = Ext.extend ( Ext.Ajax.request, {
     url : 'ajax.php' ,
     params : { action : 'getDate' },
     method: 'GET',
     success: function ( result, request ) {
        Ext.MessageBox.alert ('Success', 'Data return from the server: '+    result.responseText);
     },
     failure: function ( result, request) {
        Ext.MessageBox.alert('Failed', result.responseText);
      }
} ); 

расширяя класс (пространства имен до вас), вы все равно можете манипулировать URL, параметрами, методом, успехом и неудачей.если не настроен - есть значения по умолчанию

3 голосов
/ 13 июля 2011

Хорошо, этот вопрос довольно старый, но, возможно, есть более гибкий способ сделать это. Очень важно понимать, что Ext.Ajax - это singleton , то есть это уже уникальный класс, созданный ранее. «Расширение» синглтона не имеет особого смысла, и отдельная функция может излишне запутывать и / или ограничивать позже.

Вы можете добавить свою собственную специальную функцию запроса Ajax, например:

Ext.Ajax.dateRequest = function(myObj){
   // set the pre-configured parameters here
   myObj.url = 'ajax.php';
   myObj.params = { action: 'getDate'};
   myObj.method = 'GET';
   // call the original request function with the modified config object
   this.request(myObj); 
};

Так что теперь вы можете изменить ваши повторные запросы Ajax на:

Ext.Ajax.dateRequest({
   success: yourSuccessFunction
   ,failure: yourFailureFunction
});

Преимущество этого заключается в том, что вы можете легко добавлять предварительно сконфигурированные параметры в функцию «dateRequest», И вы можете добавлять дополнительные параметры в каждый запрос Ajax (например, в другое время ожидания), не переписывая ничего.

РЕДАКТИРОВАТЬ: Yikes! Первоначально я опубликовал решение ниже, которое, как я думал, «клонирует» Ext.Ajax, но оно по-прежнему просто отменяет синглтон.

Это цитата из "Саки" (Ext guru) пару лет назад. Он ссылается на функцию клона, которую он написал для обычных объектов / массивов:

Функция clone ни в коем случае не предназначена для клонирования классов или созданные экземпляры Ext объектов. Это практически невозможно, так как эти установки обработчики событий почти всегда, поэтому клонирование определенно приведет к непредсказуемые результаты.

Синглтон является "созданным экземпляром Ext-объекта" и поэтому не может быть легко расширен или клонирован. Если вы не хотите связываться с Ext.Ajax напрямую, вы можете создать функцию (как уже упоминалось). Вот несколько более гибкая форма:

function dateRequest(myObj){
   myObj.url = 'ajax.php';
   myObj.params = { action: 'getDate'};
   myObj.method = 'GET';
   return Ext.Ajax.request(myObj);
}

Затем назовите его с dateRequest({success: successFunc, failure: failFunc}).

2 голосов
/ 31 января 2011

Этот код даст тот же результат:

function callme (callback) {
    Ext.Ajax.request({
        url : 'ajax.php' , 
        params : { action : 'getDate' },
        method: 'GET',
        success: callback,
        failure: function ( result, request) {  Ext.MessageBox.alert('Failed', result.responseText); 
        } 
    });
}

callme(function ( result, request ) { 
    Ext.MessageBox.alert('Success', 'Data return from the server: '+     result.responseText); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...