Extjs4,如何从视图中调用控制器动作方法?

时间:2012-09-02 06:50:32

标签: extjs extjs4.1 extjs-mvc

我想在单击网格中的单元格时从视图中调用控制器中的方法。

{ header: "<img src='/Content/images/icons/page_white_acrobat.png'/>", width: 30, dataIndex: 'documents', sortable: true, renderer: this.hasDocument,
    listeners: {
        click: function () {
        //how to call method in controller?
        }
    }
},

有人知道,请指教。

谢谢!

2 个答案:

答案 0 :(得分:2)

Sencha在项目的官方论坛上会有很多tutorials for extjs 4

当我提供一些有用的链接到良好的开始教程... 关于网格管理的特定one's ... 我认为人们可以在投票之前真正看到它。看看它,看看自己一些更好的方法来做问题提问者想要做的事情。

提供直接答案并不总是最好的学习方式。

无论如何......以下将会解决问题:

var controller = this.getController(Ext.String.capitalize(config.controller));
/* where config was an argument of your callback method) */

我建议你尽可能地从控制器和模型视图中分离。如果你看一下我所链接的项目,你会发现Viewport.js是一个很好的方法。它在这些简短脚本的末尾用.callParent(arguments)方法调用来调用控制器。

答案 1 :(得分:1)

我确信原来的人已经找到答案或做了一些事情来做这个伎俩。

但对于可能有同样问题的人来说,这是一个快速举例说明:

不要将监听器放入(MVC)-VIEW您的应用程序中。为元素提供ID(在本例中为网格)

在(MVC) - CONTROLLER中添加此功能:

init : function(app) {
    this.control({
        'myWindow': {
            afterrender : this.doAfterRender 
            /*SAMPLE*/
        },
        'myWindow #someGrid_ID' : {
            select: this.doSelect 
            /* THIS FUNCTION IS LOCATED in the Controller*/
        }
    });
},
doSelect : function() { 
    /*....*/ 
}

现在控制器将监听事件并对其做出反应。

我希望这可以帮助一些可能会对此感到困惑的人。

看看:

Dom查询 - 解释:

  • “myWindow #someGrid_ID” - dom查询注意#它引用元素的ID。
  • “myWindow” - 指我窗口的Alias。
  • “someGrid_ID” - 指我网格的ID。

(网格是“myWindow”的子元素)

希望这会有所帮助