变量访问原型

时间:2009-08-06 05:39:20

标签: javascript javascript-events prototypejs webos mojo-sdk

我正在开发新的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

2 个答案:

答案 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