【问题标题】:Calling a method from XBL从 XBL 调用方法
【发布时间】:2011-05-28 19:44:18
【问题描述】:

从一个 XBL 方法,当我需要调用另一个方法时,我喜欢:

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


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

我想知道有没有办法在不需要元素id的情况下调用本地方法?我试过this.myMethod_1(),但它说该方法不存在。

【问题讨论】:

  • this.myMethod_1() 应该可以工作。您现在执行此操作的方式破坏了 XBL 范式的更大部分 - 您的绑定不再可重用。
  • @Sergey Ilinsky 更难过,因为它不能用 this 调用,它只能在构造函数上工作,而不是在方法上。
  • 你能告诉我们调用myMethod_2的代码吗?如果你这样称呼它: document.getElement(...).myMethod_2() 很好,但如果你有类似 someElement.addEventHandler("click", myxbl.myMethod_2,...);这行不通,因为事件目标是这个。
  • @Mihailo 我将其称为我的示例所示。但是,在制作一个简单的示例项目时,它只适用于this.. 我不知道为什么在我当前项目的方法中它没有.. 我会做一些测试,然后我会回到这里..
  • @Tom - 你实际上并没有回答 myMethod_2 是如何被调用的,你展示了 myMethod_1 是如何被调用的。这对于确定该上下文中的 this 是什么很重要。

标签: xul xbl


【解决方案1】:

在事件监听器的特定情况下,还有另一种解决问题的方法,那就是将元素本身作为监听器传递。当然,您只能获得一个 handleEvent 方法,因此如果您要在许多不同的事件目标上侦听许多不同的事件,则此方法的用处不大。

<implementation implements="nsIDOMEventListener">
  <method name="handleEvent">
    <parameter name="aEvent"/>
    <body>
      <![CDATA[
        // do stuff
      ]]>
    </body>
  </method>

【讨论】:

  • +1 有趣.. 知道这个“实现”属性更有趣,是否有“扩展”属性?
  • 扩展什么?一个绑定可以扩展另一个绑定,如果这就是你的意思的话。
【解决方案2】:

你能告诉我们调用 myMethod_2 的代码吗?如果你这样称呼它: document.getElement(...).myMethod_2() 很好,但如果你有类似 someElement.addEventHandler("click", myxbl.myMethod_2,...);这将不起作用,因为事件目标将是 this

这对于确定该上下文中的 this 是什么很重要

编辑:(汤姆的回复)

哦,我想我明白了.. 正是这个问题.. 我从另一个文档的按键监听器中调用它,而“this”不是我想的那样..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2021-12-27
    • 2013-09-16
    • 2015-08-29
    相关资源
    最近更新 更多