我还在学习Extjs和mvc所以我有一个设计问题,我相信有人可以为我解答.我的问题是:
我有2个控制器可以处理两个不同的视图.调用两个控制器中的任何一个以基于用户类型呈现正确的视图.所以在我的情况下,如果用户是管理员,那么他们将获得基于凭证的管理员视图,如果该人是标准用户,那么他们将获得标准视图.决策逻辑应该放在app.js中还是应该有另一个控制器决定调用哪个控制器?
我想的一种方式:
管理员控制器
Ext.define('adminController', {
// handles admin
})
Run Code Online (Sandbox Code Playgroud)
标准用户控制器
Ext.define('standardController', {
// handles standard
})
Run Code Online (Sandbox Code Playgroud)
App.js
Ext.application({
name: 'MTK',
autoCreateViewport: true,
if(admin) {
controllers: ['adminController']
}
else(std){
controllers: ['standardController']
}
});
Run Code Online (Sandbox Code Playgroud)
另一个想法:
管理员控制器
Ext.define('adminController', {
// handles admin
})
Run Code Online (Sandbox Code Playgroud)
标准用户控制器
Ext.define('standardController', {
// handles standard
})
Run Code Online (Sandbox Code Playgroud)
主控制器
Ext.define('mainController', {
if(admin){
call adminController
}
else(std){
call standardController
}
})
Run Code Online (Sandbox Code Playgroud) 我试图在控制器中获取我的视图实例.我怎样才能做到这一点.我尝试这样做的主要原因是我在视图中有一个网格,我想要禁用,直到从组合框中进行选择,因此我需要访问视图的实例.
救命?
我的控制器:
Ext.define('STK.controller.SiteSelectController', {
extend: 'Ext.app.Controller',
stores: ['Inventory', 'Stacker', 'Stackers'],
models: ['Inventory', 'Stackers'],
views: ['scheduler.Scheduler'],
refs: [{
ref: 'stackerselect',
selector: 'panel'
}],
init: function () {
this.control({
'viewport > panel': {
render: this.onPanelRendered
}
});
},
/* render all default functionality */
onPanelRendered: function () {
var view = this.getView('Scheduler'); // this is null?
}
});
Run Code Online (Sandbox Code Playgroud)
我的看法:
Ext.Loader.setConfig({
enabled: true
});
Ext.Loader.setPath('Ext.ux', '/extjs/examples/ux');
Ext.require([
'Ext.ux.grid.FiltersFeature',
'Ext.ux.LiveSearchGridPanel']);
var filters = {
ftype: 'filters',
autoReload: false,
encode: false,
local: true
}; …Run Code Online (Sandbox Code Playgroud)