2016-12-09 1 views
0

Я довольно новичок в использовании Ext JS 4.0.7 и недавно обнаружил параметры Config, поэтому я настроил следующий конфигурационный класс, который инициализируется с помощью следующее:Несколько классов в Ext JS для обновления и совместного использования одинаковых настроек конфигурации

Ext.define('CurrentRowSelection', { 
extend: 'Ext.app.Controller', 

config: { 
currentAccountID: { 
    $value: 'Empty', 
    cached: true, 
    evented: true 
} 
}, 

initialize: function(config) { 
this.callParent(config); 
} 

}); 

Я могу обновить этот конфиг весьма приятно от слушателя события другого класса, который является правой кнопкой мыши на записи строк и захватывая значение currentAccountID. Однако каждый раз, когда я пытаюсь получить доступ к новой, обновленной конфигурации из нового класса после инициализации, он снова возвращается к «Пустому» значению.

Следующая используется для установки конфигурации из класса, содержащего слушателя:

var CurrentRowSelection = new CurrentRowSelection(); 
CurrentRowSelection.setCurrentAccountID(1); 

Однако, когда я создаю новый конструктор в новом классе, с надеждой на доступ к этой новой обновленной конфигурации от ELSEWARE , мой console.log сообщает мне, что он постоянно возвращается к значениям по умолчанию, поскольку он, кажется, инициализируется каждый раз, когда создается новый конструктор, что имеет смысл, но мне нужно его остановить.

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

ответ

1

Не устанавливайте новые контроллеры каждый раз. Каждый контроллер должен быть создан только один раз, потому что, если вы создаете несколько контроллеров того же типа, каждое связывание событий, которое вы готовите в методе control, выполняется несколько раз (метод control обычно является наиболее важным методом controller, хотя может быть Таким образом, каждый контроллер должен существовать исключения)

, как только один экземпляр, и что синглтон бы получить доступ с помощью getController, где и когда вам это нужно:.

MyAppName.app.getController("ControllerName").setCurrentAccountID(1) 

То есть, я бы рекомендовал смотреть в использовании хранилища для хранения данных, а не контроллеры. Магазины предлагают возможность синхронизации настроек с сервером (создание, чтение, обновление, удаление). Если вы хотите создать одноэлементный магазин, вы должны дать ему storeId и использовать Ext.getStore() для доступа в магазин.

Например, параметры конфигурации в моем приложении в первой записи магазина с StoreID AllSettings:

Ext.getStore("AllSettings").getAt(0).get("groupDiscoveryCacheHours") 
+0

Спасибо, что нашли время, чтобы ответить на этот вопрос. Вместо магазина я решил использовать Cookies для браузера, и это, похоже, работает очень хорошо. Спасибо, что заставил меня думать за пределами коробки. – greenTree

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