Ext.define('DigitalPaper.controller.Documents', {
extend: 'Ext.app.Controller',
views: ['Documents'],
stores: ['Documents'],
models: ['Documents'],
init: function() {
console.log('[OK] Init Controller: Documents');
}
});
获取此控制器的模型或视图的功能是什么? 我试过了
Ext.getModel('Documents');
this.getModel('Documents');
this.getModel();
this.getDocumentsModel();
有什么建议吗?
答案 0 :(得分:9)
在Controller中,可以使用对视图的引用:
refs: [{
ref: 'viewDocuments', // will be create the method this.getViewDocuments();
selector: 'Documents'
}],
所以你可以用这个获得视图:
this.getViewDocuments();
答案 1 :(得分:7)
Ext控制器非常奇怪,因为无论您有多少相关的视图实例,都有一个给定控制器的单个实例。在大多数MVC或MVP系统中,每个视图实例都有一个控制器实例。
如果您打算使用多个视图实例,则不应在控制器中保留对这些视图的引用。
你可能想要查看Deft的ExtJs的MVC扩展,每个视图实例有一个控制器实例(加上依赖注入):
无论如何,controller.getView()返回对视图CLASS的引用,而不是对象实例。与getModel()相同。 getStore()返回商店实例。
在您的控制器中,您可以执行以下操作:
this.viewInstance = this.getDocumentsView().create();
我还建议以单数形式命名您的模型。它不是文件。这是一份文件。
答案 2 :(得分:1)
这应该有效:
Ext.define('DigitalPaper.controller.Documents', {
extend: 'Ext.app.Controller',
views: ['Documents'],
stores: ['Documents'],
models: ['Documents'],
init: function() {
console.log('[OK] Init Controller: Documents');
// get references to view and model classes which can be used to create new instances
console.log('View', this.getDocumentsView());
console.log('Model', this.getDocumentsModel());
// reference the Documents store
console.log('Store', this.getDocumentsStore());
}
});
这些方法是由Ext控制器中创建getter的方法创建的。 http://docs.sencha.com/ext-js/4-0/source/Controller.html#Ext-app-Controller
以下是该方法的样子:
createGetters: function(type, refs) {
type = Ext.String.capitalize(type);
Ext.Array.each(refs, function(ref) {
var fn = 'get',
parts = ref.split('.');
// Handle namespaced class names. E.g. feed.Add becomes getFeedAddView etc.
Ext.Array.each(parts, function(part) {
fn += Ext.String.capitalize(part);
});
fn += type;
if (!this[fn]) {
this[fn] = Ext.Function.pass(this['get' + type], [ref], this);
}
// Execute it right away
this[fn](ref);
},
this);
},
答案 3 :(得分:0)
getModel()和getView()不返回控制器的模型/视图 - 它们在应用程序中返回这些实例(如果不存在,它们将被实例化)。
您可以使用它来获取视图/模型名称:
this.views[0]
我不确定你在哪里使用你的gets(即this.getModel('Details')),但这些应该正确返回模型的一个实例(构造函数是你可能遇到问题的唯一地方这些)。