Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Sench Touch 2中从视图调用控制器javascript函数_Javascript_Touch_Extjs - Fatal编程技术网

在Sench Touch 2中从视图调用控制器javascript函数

在Sench Touch 2中从视图调用控制器javascript函数,javascript,touch,extjs,Javascript,Touch,Extjs,我非常成功地学习了miamicoder的sencha touch 2教程(http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/)然而,因为我还是一个新手,我的javascript知识限制了我的一些东西 我要做的是调用存储在控制器中的javascript函数,但传递局部变量。以下是我在其中一个视图的初始化中声明的代码: var geo = Ext.create('Ext.util.Geolocation', {a

我非常成功地学习了miamicoder的sencha touch 2教程(http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/)然而,因为我还是一个新手,我的javascript知识限制了我的一些东西

我要做的是调用存储在控制器中的javascript函数,但传递局部变量。以下是我在其中一个视图的初始化中声明的代码:

var geo = Ext.create('Ext.util.Geolocation', {autoUpdate: false, listeners: {
            locationupdate: function(geo) {
                console.log('Got location: ',geo);
                findCurrentAddress(geo,"txtFrom");
            },
            //locationerror: {fn: this.onGotLocation, scope: this }
            locationerror: function(geo, bTimeout, bPermissionDenied, bLocationUnavailable, message) {
                alert("deal with this later")
            }
        }
    });
    geo.updateLocation();
然后findCurrentAddress被定义为:

function findCurrentAddress(geo, txt){
  alert("do some stuff with the geo object");
}
如何将此函数移到控制器上,并使其仍可访问此视图?就像教程在上面提供的链接上处理onnewbuttonap事件一样

最终的结果是一样的,但我想保持事情的整洁,但不让函数碍事

我试着做:

locationupdate: {fn: this.onGotLocation, scope: this }
并在控制器中连接必要的代码,除了我丢失了具有lat/long属性的geo对象外(至少,我不知道如何传递它!)


非常感谢任何帮助/提示/指点!)

简单的回答-不要这样做。您不能从视图中调用控制器的方法

为什么不从视图中触发事件并在控制器中订阅该事件

大概是这样的:

...
locationupdate: function(geo) {
    console.log('Got location: ',geo);
    this.fireEvent('get_loc_update', geo); //this refers to your instance of Ext.util.Geolocation
},
...

然后在控制器(或任何您称之为控制器)中侦听get_loc_update事件,该事件将传递geo对象

我认为该视图旨在触发控制器捕获的事件…?是的,视图触发事件。控制器订阅这些事件并执行某些操作。