Toon posts:

[XUL] command scope

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een redelijk complexe xul gui met verschillende overlays erin. Het belangrijkste deel is een beetje te vergelijken met de modifier stack in 3dmax. Er zijn verschillende sets tools, die in overlays gedefinieerd worden, die tools op die stack kunnen plaatsen. Een php script checked een directory en genereert een overlay met daarin de overlays van de toolsets. Soort plugin systeem dus.

Een toolset ziet er ruwweg als volgt uit:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
<overlay>
<script/>
<commandset>
  <command id="foo" oncommand="alert(this.nodeName); Stack.addTool(func_from_js,'toolname');"/>
</commandset>
<hbox>
  <checkbox command="foo"/>
  <menulist command="foo">
    <!-- etc -->
  </menulist>
</hbox>
</overlay>

het script element bevat een js file met de functies die op de stack worden gezet, even niet erg belangrijk, er worden gewoon letterlijk functiereferenties in een array gepleurt.

Probleem ligt bij het aanroepen van het command. Als ik op de checkbox click krijg ik als alert "command" en als ik op de menulist druk krijg ik "menulist".

Da's vaag, ik zou denken dat "this" refereert naar het element die het command invoked, maar dit is dus wel even maf. Iemand een idee hoe ik dat op deze manier op kan lossen?

Wat ik wil is deze overlay file zo simpel mogelijk houden om plugins maken makkelijk te houden. De addTool functie staat centraal, dus daar kan ik dus ingewikkeld scripten. En het is in die functie dat ik een referentie naar het invoking element wil hebben, dus iets doen als
JavaScript:
1
addTool(this,func_from_js,'toolname');

en een commandset wil ik toch houden voor het overzicht

  • user109731
  • Registratie: Maart 2004
  • Niet online
Misschien kun je wat doen met document.commandDispatcher? Zoiets:
XML:
1
<command id="foo" oncommand="alert(this.nodeName); alert(document.commandDispatcher.focusedElement.nodeName);" />

[ Voor 1% gewijzigd door user109731 op 15-09-2006 10:17 . Reden: [code] -> [code=xml] ]


Verwijderd

Topicstarter
het explicitOriginalElement property van het event object heeft me geholpen. ik stuur ook maar gewoon het hele event object mee de functiehandler in.