Extjs4 MVC,如何从Controller类中获取Model或View?

Pie*_*per 9 model extjs view extjs4

Ext.define('DigitalPaper.controller.Documents', {
 extend: 'Ext.app.Controller',

 views:  ['Documents'],
 stores: ['Documents'],
 models: ['Documents'],

 init: function() {
     console.log('[OK] Init Controller: Documents');
 } 
});
Run Code Online (Sandbox Code Playgroud)

获取此控制器的模型或视图的功能是什么?我试过了

  Ext.getModel('Documents');
  this.getModel('Documents');
  this.getModel();
  this.getDocumentsModel();
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Pie*_*per 9

解决方案:

在Controller中,可以使用View的引用:

refs: [{
    ref: 'viewDocuments', // will be create the method this.getViewDocuments();
    selector: 'Documents'
}],
Run Code Online (Sandbox Code Playgroud)

所以你可以用这个获得View:

this.getViewDocuments();
Run Code Online (Sandbox Code Playgroud)

  • 似乎没有人说过"this.getViewDocuments();" 需要是 - 或者"这个"在人们期望我使用它的背景下是什么:( (6认同)

Nei*_*gan 7

Ext控制器非常奇怪,因为无论您有多少相关的视图实例,都有一个给定控制器的单个实例.在大多数MVC或MVP系统中,每个视图实例都有一个控制器实例.

如果您计划使用多个视图实例,则不应在控制器中保留对这些视图的引用.

你可能想要查看Deft的ExtJs的MVC扩展,每个视图实例有一个控制器实例(加上依赖注入):

http://deftjs.org/

无论如何,controller.getView()返回对视图CLASS的引用,而不是对象实例.与getModel()相同.getStore()返回商店实例.

在您的控制器中,您可以执行以下操作:

this.viewInstance = this.getDocumentsView().create();
Run Code Online (Sandbox Code Playgroud)

我还建议以单数形式命名您的模型.它不是文件.这是一份文件.