0

我正在关注 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");
}

如何将此功能移至控制器并使其仍可访问此视图?就像本教程对上面提供的链接上的 onNewButtonTap 事件所做的那样。

最终结果是一样的,但我想保持清洁,但不妨碍功能。

我试着做:

locationupdate: {fn: this.onGotLocation, scope: this }

并在控制器中连接必要的代码,除了我丢失了具有纬度/经度属性的地理对象(至少,我不知道如何传递它!)

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

4

2 回答 2

1

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

于 2012-07-03T11:34:06.120 回答
0

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

像这样的东西:

...
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 事件(或任何你称之为的),这将传递地理对象

于 2012-07-12T01:36:15.347 回答