Итак, у меня есть контроллер с методом, в котором я хочу загрузить представление.
- Как загрузить представление с контроллера?
- Как передать некоторые параметры с контроллера на просмотр при загрузке?
Любая помощь очень ценится.
Итак, у меня есть контроллер с методом, в котором я хочу загрузить представление.
Любая помощь очень ценится.
Чтобы загрузить представление, вы можете использовать Ext.widget()
. Используйте Ext.define()
, чтобы создать представление в вашем файле вида. Я бы рекомендовал использовать свойство alias
для определения встроенного xtype для представления.
Когда вам нужно загрузить представление, вы создаете представление с помощью Ext.widget()
и укажите xtype (псевдоним для вашего представления). Вот пример:
// define a window
Ext.define('MyApp.view.user.Add',
extend: 'Ext.window.Window',
alias : 'widget.adduser',
.
. // Add other properties, custom properties, methods, event handlers etc..
});
Теперь, когда вы хотите создать экземпляр в своем пользовательском контроллере, выполните следующие действия:
// create an instance
var view = Ext.widget('adduser'); // refer the below note!
Примечание: обратите внимание, что нет "виджета".! он автоматически добавляется к имени виджета, который вы передаете.
Теперь рассмотрим параметры передачи. Как и метод Ext.create, вы должны иметь возможность передавать любые параметры:
// create an instance with params
var view = Ext.widget('adduser', {title: 'New User title'});
Относительно ref: refs поможет вам получить ссылки на Views на вашей странице. Они не помогают создавать экземпляр или загружать представление. Если у вас есть рендеринг, вы можете использовать систему ref, чтобы получить доступ к этому экземпляру и управлять просмотром. Вам нужно использовать ComponentQuery, чтобы получить ссылку на ваш просмотр.
refs может использоваться для создания новых экземпляров, а также для доступа к существующим. Добавив опцию autoCreate: true
в ваш ref, вызов getter приведет к созданию нового экземпляра с использованием определения ref в качестве его конфигурации, если никакой существующий компонент не соответствует селектору.
refs: [{
ref: 'list'
,selector: 'myusersgrid#users'
,autoCreate: true
// any additional options get passed as config when an instance needs to be created
,xtype: 'myusersgrid'
,itemId: 'users'
,store: 'Users'
,title: 'Users'
},{
ref: 'otherList'
,selector: 'myusersgrid#administrators'
,autoCreate: true
// any additional options get passed as config when an instance needs to be created
,xtype: 'myusersgrid'
,itemId: 'administrators'
,store: 'SpecialUsers'
,title: 'Special Users'
}],
Обратите внимание на использование # для дополнительного соответствия itemId, чтобы я мог ссылаться на несколько экземпляров одного и того же типа xtype
Также существует опция forceCreate: true
, которая заставит ref getter всегда возвращать новый экземпляр, без него autoCreate будет создавать один экземпляр при первом его извлечении и затем продолжать возвращать тот же самый.
Если я понимаю ваш вопрос, я думаю, вы хотите использовать refs, посмотрите на документы для Ext.app.Controller: http://dev.sencha.com/deploy/ext-4.0.0/docs/api/Ext.app.Controller.html
В основном вы создаете список ссылок с использованием селекторов css:
refs: [
{
ref: 'list',
selector: 'grid'
}
],
Затем в классе вы можете получить доступ к этому ref, используя get, i.e.:
refreshGrid: function() {
this.getList().store.load();
}
Метод getList() создается для вас, когда вы создаете ref для "списка".
Я столкнулся с этой проблемой. Я создал метод на своем абстрактном базовом контроллере для извлечения экземпляра представления и создания, если он не существует.
Это будет работать правильно даже после того, как представление будет уничтожено - будет создан новый.
Ext.define('My.controller.Base', {
extend: 'Ext.app.Controller',
//Retrieves an instance of the top-level view
//If it has not been created yet than one is instantiated
//Also, overrides the .close() method on the view to
//null out the instance reference on the controller (very necessary)
getViewInstance: function () {
var self = this;
if(!this.viewInstance) {
if(this.views && this.views.length) {
var view = this.getView(this.views[0]);
this.viewInstance = view.create();
this.viewInstance.close = function () {
view.prototype.close.apply(this, arguments);
self.viewInstance = null;
};
}
}
return this.viewInstance;
}
});
Теперь все мои контроллеры могут легко получить доступ к их виду из w/i-кода контроллера без каких-либо внешних переменных.
Используйте Ext.create('Правильное имя файла для открытия', param1 = me);
Во вновь созданном представлении используйте this.param1 для доступа к параметрам.
EG: Ext.create('view.HelloOverlay, param1 = "Hello", param2 = "World" ); в контроллере HelloOverlay, используя this.param1 даст "Hello", и this.param2 предоставит "Мир".
Иногда передаваемые параметры будут присутствовать в представлении, поэтому используйте this.getView(). paramName