2014-02-18 5 views
7

Хорошо, я зациклился на том, что должно быть основной задачей в ExtJs. Я пишу простой сценарий входа, который отправляет комбинацию имени пользователя и пароля в веб-службу RESTful и получает идентификатор GUID, если учетные данные верны.Прокси-сервер модели ExtJs против прокси-сервера магазина

Мой вопрос: использовать ли прокси-сервер модели или прокси-сервер магазина?

Насколько я понимаю, модели представляют собой одну запись, тогда как магазины предназначены для обработки наборов данных, содержащих более одной записи. Если это правильно, то кажется, что прокси-модель Model - это путь.

После документации Сенча по адресу http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.Model код будет выглядеть примерно так:

Ext.define('AuthenticationModel', { 
    extend: 'Ext.data.Model', 
    fields: ['username', 'password'], 

    proxy: { 
     type: 'rest', 
     url : '/authentication' 
    } 
}); 

//get a reference to the authentication model class 
var AuthenticationModel = Ext.ModelManager.getModel('AuthenticationModel'); 

Пока все не в порядке, до следующего шага:

//Use the configured RestProxy to make a GET request 
AuthenticationModel.load('???', { 
    success: function(session) { 
     console.log('Login successful'); 
    } 
}); 

Нагрузка() метод для модели class - это статический вызов, ожидающий единственного уникального идентификатора. Логины обычно зависят от двух факторов: имени пользователя и пароля.

Значок Магазин Прокси-сервер - это единственный способ проверить учетную запись имени пользователя и пароля пользователя в ExtJS. Может ли кто-нибудь проверить и объяснить? Любая помощь, чтобы понять это, будет очень признательна.

ответ

7

Вам просто нужно знать следующее:

Магазин будет использовать свой собственный прокси-сервер, если вы настроили один для этого экземпляра и, если он не принимает прокси из модели.

Таким образом, вы можете легко использовать две конфигурации прокси для включения операций с несколькими CRUD в хранилище и операций с одним CRUD на моделях. Обратите внимание, что метод статической нагрузки модели ожидает модель id, потому что предполагается загрузить модель только одним идентификатором (да, составные клавиши не поддерживаются). Вам также нужно будет получить экземпляр модели в обратном вызове (как и вы).

Вернуться к вашей проблеме Имя пользователя/пароль

Вы можете применить сеансовый модель с настраиваемой «» loadSession метод

loadSession: function(username,password, config) { 
    config = Ext.apply({}, config); 
    config = Ext.applyIf(config, { 
     action: 'read', 
     username: username, 
     password: password 
    }); 

    var operation = new Ext.data.Operation(config), 
     scope  = config.scope || this, 
     callback; 

    callback = function(operation) { 
     var record = null, 
      success = operation.wasSuccessful(); 

     if (success) { 
      record = operation.getRecords()[0]; 
      // If the server didn't set the id, do it here 
      if (!record.hasId()) { 
       record.setId(username); // take care to apply the write ID here!!! 
      } 
      Ext.callback(config.success, scope, [record, operation]); 
     } else { 
      Ext.callback(config.failure, scope, [record, operation]); 
     } 
     Ext.callback(config.callback, scope, [record, operation, success]); 
    }; 

    this.getProxy().read(operation, callback, this); 
} 

Теперь называем это вместо нагрузки.

2

Я нашел в документации Сенча App Архитектура Часть 2

Использовать прокси для моделей:

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

Использование прокси для магазинов:

В Ext JS 4, несколько магазинов могут использовать ту же модель данных, даже если магазины будут загружать свои данные из различных источников. В нашем примере модель Station будет использоваться магазином SearchResults и Stations , как для загрузки данных из другого места. Один возвращает результатов поиска, другой возвращает любимые станции пользователя. До для этого, один из наших магазинов должен будет переопределить прокси-сервер , определенный на модели.

Смежные вопросы