我正在开发新的Palm Pre WebOS,Palm Pre的应用程序是在MojoSDK中开发的,它是在Prototype Javascript Framework之上开发的。
我正在尝试在事件处理程序中访问在助理级别定义的变量,这些变量也是同一个助手的一部分。当我在事件处理程序中访问助手级别变量时,我将其视为未定义。但是,可以在设置功能中访问变量。
供参考,请查看以下代码:
代码:
function MyTestAssistant(passedValue)
{
this.passedValue = passedValue;
}
MyTestAssistant.prototype.setup = function()
{
Mojo.Log.info("Passed Value Is: " + this.passedValue); // Prints the value set in Constructor
}
MyTestAssistant.prototype.testListTapHandler = function(event)
{
Mojo.Log.info("Passed Value Is: " + this.passedValue); // Logs undefined
}
其他人有这个问题,或者我在这里做错了什么。是否可以访问处理程序中的变量,或者我们已经考虑了解决方法来实现它。
期待尽快得到答复。
谢谢和问候,
Muhammad Haseeb Khan
答案 0 :(得分:3)
我不熟悉mojo-sdk,但这听起来很像你在设置事件处理程序时混淆了你的“this”引用。很有可能,当调用testListTapHandler时,它会引用触发事件的对象。
Prototype有非常方便的bind()方法来帮助消除这种混乱。
我猜你有类似的东西
elem.observe('eventname', myTestAssistant.testListTapHandler);
麻烦的是,当事件被触发时,在testListTapHandler中,这将引用elem。为了纠正这个问题,我们将事件处理程序与所需的对象绑定在一起:
elem.observe('eventname', myTestAssistant.testListTapHandler.bind(myTestAssistant));
答案 1 :(得分:0)
我找到了问题的解决方案。另一个Forum helped我也是。
保罗指出的核心问题是具有约束力和范围。
我将我的实现更新为以下内容以使其正常工作:
function MyTestAssistant(passedValue)
{
this.passedValue = passedValue;
}
MyTestAssistant.prototype.setup = function()
{
Mojo.Log.info("Passed Value Is: " + this.passedValue); // Prints the value set in Constructor
// Was Using the following code before and this.passedValue wasn't accessible in
// testListTapHandler
// Mojo.Event.listen(this.testList, Mojo.Event.listTap, this.testListTapHandler);
// Used the following code now and this.passedValue is accessible in
// testListTapHandler
this.testListTapHandler = this.testListTapHandler.bindAsEventListener(this);
Mojo.Event.listen(this.testList, Mojo.Event.listTap, this.testListTapHandler);
}
MyTestAssistant.prototype.testListTapHandler = function(event)
{
Mojo.Log.info("Passed Value Is: " + this.passedValue); // Prints the value set in Constructor
}
感谢您的帮助Paul。
此致
Muhammad Haseeb Khan