我正在关注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 }
并在控制器中连接必要的代码,除非我丢失了具有lat / long属性的geo对象(至少,我不知道如何传递它!)
任何帮助/提示/指示非常感谢! :)
答案 0 :(得分:1)
简单回答 - 不要这样做。您不从视图中调用控制器的方法。
答案 1 :(得分: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事件(或任何你称之为的事件),这将传递地理对象