Вызов метода из XBL

Из метода XBL, когда мне нужно вызвать другой метод, мне нравится:

        <method name="myMethod_1">
            <body>
                <![CDATA[
                    // do staff
                ]]>
            </body>
        </method>


        <method name="myMethod_2">
            <body>
                <![CDATA[
                    document.getElementById("thisElementID").myMethod_1();
                ]]>
            </body>
        </method>

Я хотел бы знать, есть ли способ вызвать локальный метод без идентификатора элемента? Я пробовал this.myMethod_1(), но он говорит, что метод не существует.


person The Student    schedule 21.12.2010    source источник
comment
this.myMethod_1() должен просто работать. То, как вы это делаете сейчас, ломает большую часть парадигмы XBL - ваша привязка больше не может использоваться повторно.   -  person Sergey Ilinsky    schedule 21.12.2010
comment
@Сергей Ильинский еще более грустный, потому что с этим не работает вызов, он будет работать только с конструктором, а не с методами.   -  person The Student    schedule 21.12.2010
comment
Вы можете показать нам код, вызывающий myMethod_2? Если вы называете это так: document.getElement(...).myMethod_2(), это нормально, но если у вас есть что-то вроде someElement.addEventHandler(click, myxbl.myMethod_2,...); это не сработает, так как целью события будет это.   -  person Mihailo    schedule 22.12.2010
comment
@Mihailo Я называю это, как показывает мой пример. Но при создании простого примера проекта он просто работал с this.. Я не знаю, почему в методе моего текущего проекта это не так.. Я сделаю несколько тестов и вернусь сюда..   -  person The Student    schedule 22.12.2010
comment
@Tom - на самом деле вы не ответили, как называется myMethod_2, вы показали, как вызывается myMethod_1. Это важно для определения того, что такое this в данном контексте.   -  person Mihailo    schedule 22.12.2010
comment
@Mihailo ой, думаю, я понял .. именно в этом проблема .. Я звоню из прослушивателя нажатия клавиш другого документа, и это было не то, что я думаю .. опубликуйте это как ответ, чтобы я пометил это как правильно. И спасибо!   -  person The Student    schedule 22.12.2010


Ответы (2)


Вы можете показать нам код, вызывающий myMethod_2? Если вы называете это так: document.getElement(...).myMethod_2(), это нормально, но если у вас есть что-то вроде someElement.addEventHandler("click", myxbl.myMethod_2,...); это не сработает, поскольку целью события будет это.

Это важно для определения того, что такое это в данном контексте.

EDIT: (ответ Тома)

ой, думаю, я понял.. проблема именно в этом.. Я вызываю его из прослушивателя нажатия клавиш другого документа, и «это» было не тем, что я думаю..

person Mihailo    schedule 22.12.2010

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

<implementation implements="nsIDOMEventListener">
  <method name="handleEvent">
    <parameter name="aEvent"/>
    <body>
      <![CDATA[
        // do stuff
      ]]>
    </body>
  </method>
person Neil    schedule 10.01.2011
comment
+1 Интересно .. еще интереснее узнать, что этот атрибут «реализует», есть ли расширяющий? - person The Student; 11.01.2011
comment
Расширение чего? Привязка может расширить другую привязку, если вы это имеете в виду. - person Neil; 17.01.2011