2009-08-06 5 views
1

Я работаю над новым Palm Pre WebOS, приложения для Palm Pre разработаны в MojoSDK, который разработан поверх прототипа Javascript Framework.Переменные Access Prototype

Я пытаюсь получить доступ к переменным, определенным на уровне помощника, в обработчиках событий, которые также являются частью того же помощника. Когда я получаю доступ к переменным уровня помощника в обработчике событий, я получаю его как неопределенный. Однако переменные доступны в функции настройки.

Для справки, взгляните на код ниже:

Код:

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 
} 

кто-либо другой с этой проблемой, или я делаю что-то здесь не так. Возможно ли получить доступ к переменным в обработчике или мы обдумаем обходные пути для его достижения.

Ждем, когда ответит.

Спасибо и наилучшие пожелания,

Мухаммад Haseeb Хан

+0

Можете ли вы показать нам код, где вы называете этот обработчик событий? – RaYell

+0

Mojo.Event.listen (this.myTestList, Mojo.Event.listTap, this.testListTapHandler); –

ответ

3

Я не знаком с Mojo-SDK, но это звучит много, как вы только что получили вашу «это» ссылка перепутана при установке обработчик события. По всей вероятности, когда вызывается testListTapHandler, это ссылается на объект, который запускает событие.

Прототип имеет очень удобный способ bind(), чтобы помочь устранить эту путаницу.

Я думаю, вы что-то вроде этого

elem.observe('eventname', myTestAssistant.testListTapHandler); 

Проблемы, когда событие происходит, внутри testListTapHandler, это будет ссылаться на Эль. Чтобы исправить это, мы привязываем обработчик события с нужным объектом:

elem.observe('eventname', myTestAssistant.testListTapHandler.bind(myTestAssistant)); 
0

Я нашел решение проблемы. Другой Forumhelped меня тоже.

Основная проблема, о которой говорил Павел, имеет обязательный характер и область применения.

Я обновил свою реализацию в следующих за то, что работает:

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 
} 

Спасибо за вашу помощь Павла.

С уважением,

Мухаммад Haseeb Хан