2012-09-02 99 views
0

我想单击网格中的单元格时从视图中调用控制器中的方法。Extjs4,如何从视图调用控制器操作方法?

{ 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? 
     } 
    } 
}, 

有人知道,请指教我。

谢谢!

+0

这是从你的MVC点非常不好的做法。组件不应该意识到它们与控制器一起使用,如果您正在编写适当的可重用代码,它们可能不会如此。你应该真的让控制器处理组件事件,这实际上是控制器的目的。另见[这个相关的问题](http://stackoverflow.com/questions/12234747)。 – Izhaki

回答

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)方法调用调用控制器。

+0

我已经这样做了,因为我真的认为它是以Sencha ExtJS开始的。否则,他从来没有这样试过/问过这个问题。 – ThierryB

+0

你现在有一个直接的解决方案... – ThierryB

+0

好吧,现在你的答案看起来更像是一个正确的答案。只是有一件事,我找不到你在链接'one's'的答案中提供的代码,你能不能分享到提供的线路的路径,所以当点击链接时,OP可以轻松找到它? – Izhaki

1

我确定原来的人已经遇到了答案或做了一些伎俩。

但可能这里有同样的问题的人是怎么做一个简单的例子:

不要把监听到您的应用程序(MVC) - 视图。给元件的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() { 
    /*....*/ 
} 

现在控制器将监听的事件并在其上发生反应。

我希望这可以帮助一些可能会遇到困难的人。

看看:

大教堂查询 - 解释:

  • “mywindow的#someGrid_ID” - 在DOM查询音符#它是指元素的ID。
  • “myWindow” - 指我窗口的别名。
  • “someGrid_ID” - 指我的网格ID。

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

希望这有助于

相关问题