In der "To-Do List" Anwendung, stellt das buttonsArea
Gadget dem Benutzer alle Navigationsoptionen zur Verfügung:
Einen neuen To-Do List Eintrag erstellen.
Scrollen durch die To-Do Einträge mit den "<< Prev Note" und "Next Note >>" Links.
Einen To-Do List Eintrag löschen.
Die gesamte To-Do List löschen.
Fangen wir mit der ersten Option an: Einen neuen To-Do List Eintrag erstellen. Das Benutzererlebnis sollte zwei Phasen enthalten:
Tabelle 4.5. Einen neuen To-Do List Eintrag erstellen
![]() |
![]() |
"Create To-Do Item" auswählen |
Die Eintragsinformationen eingeben und "Insert Item" klicken |
Um diese Funktionalität zu implementieren, folgen wir diesen Schritten:
Schritt 1: Erstellen von JavaScript Funktionen für das ToDoList Gadget - Erstellen einer JavaScript Datei mit Funktionen speziell für das ToDoList
Gadget. Zusätzlich zur component
Funktion wird diese Datei eine onInitialized
und eine onCreateItem
Funktion enthalten. Die onCreateItem
Funktion öffnet ein neues Dialogfenster (welches nachfolgend als "Create New Item" Dialogfenster bezeichnet wird).
Schritt 2: Zuweisen von JavaScript Funktionen zum ToDoList Gadget - Zuweisen der ToDoList JavaScript Datei zum ToDoList
Gadget und anschließender Modifikation der Gadget Definition, um die onInitialized
Funktion aufzurufen, wenn der initialized
Event auftritt.
Schritt 3: Erstellen des "Create New Item" Dialogfensters - Erstellen einer .box Datei, die das "Create New Item" Popup Dialog Fenster repräsentiert und anschließendem Erstellen einer zugehörigen JavaScript Datei mit den Funktionen, die benötigt werden, um die "Browse", "Insert Item", und "Cancel" Buttons im the Dialog Fenster zu unterstützen.
Schritt 4: Testen des "Create New Item" Interfaces - Ausführen der .box Datei, die das "Create New Item" Popup Dialog Fenster repräsentiert und drücken die Buttons in ihm, um sicherzustellen, dass sie funktionieren.
Schritt 5: Erstellen von JavaScript Funktionen für das buttonsArea Gadget - Erstellen einer JavaScript Datei mit Funktionen speziell für das buttonsArea
Gadget. Zusätzlich zur component
Funktion, wird diese Datei eine onInitialized
und eine onCreateItem
Funktion enthalten. Die onCreateItem
Funktion ruft die Funktion des Parent Objekts mit gleichem Namen auf. (Das Parent Objekt ist die ToDoList
.)
Schritt 6: Zuweisen von JavaScript Funktionen zum buttonsArea Gadget - Zuweisen der buttonsArea JavaScript Datei zum buttonsArea
Gadget und anschließendem Modifizieren der Definition des Gadgets, um die onInitialized
und onCreateItem
Funktionen aufzurufen.
Schritt 7: Testen der Anwendung - Ausführen der "To-Do List" Anwendung und Sicherstellen, dass der "Create To-Do Item" Button klickbar ist, und Eingeben von Informationen in das "Create New Item" Interface möglich ist. (Wenn das Hauptfenster der Anwendung angezeigt wird, wird der "to-do" Eintrag nach seiner Erstellung nicht angezeigt. Um diese Funktionalität bereitzustellen muss Übung 4.3 abgeschlossen werden.)
Schritt 1: Erstellen von JavaScript Funktionen für das ToDoList Gadget
Zuerst müssen wir eine JavaScript Datei erstellen, die das ToDoList
Gadget repräsentiert und die "Create New Item" Dialog Box öffnet.
In einem Texteditor, erstellen wir eine neue Datei namens ToDoList.js
und fügen folgenden Code hinzu. Es ist sicherzustellen, die Datei im gleichen Verzeichnis (/samples/TodoList) zu speichern, in dem sich die anderen "To-Do List" Anwendungsdateien befinden.
// Die component Funktion wird aufgerufen, wenn das Gadget // das erste mal instantiiert wird function component (_gadget) { } // Deklaieren der Eigenschaften für die Verwendung im Gadget component.prototype.titleArea = null; component.prototype.noteArea = null; component.prototype.buttonsArea = null; component.prototype.items = Array(); component.prototype.currentItem = -1; // Die onInitialized Funktion wird aufgerufen wenn ein Gadget erstellt // wird, aber noch nicht dargestellt wird (d.h. sichtbar ist) component.prototype.onInitialized = function () { // auslesen jedes Parts des Gadgets mit deren zugehörigen ID Attributen this.titleArea = this._gadget.getPartById("titleArea"); this.noteArea = this._gadget.getPartById("noteArea"); this.buttonsArea = this._gadget.getPartById("buttonsArea"); // Wir haben nu Zugriff aud die individuellen Gadgets und können ihre // Funktionen verwenden und auf ihre Eigenschaften zugreifen } // Die onCreateItem Funktion wird aufgerufen, wenn der "create to-do item" // Button gedrückt wird. component.prototype.onCreateItem = function () { shell.print("ToDoList::onCreateItem"); var paramDictionary = shell.serviceManager.basics.dictionary; paramDictionary.setValueForKey(this._gadget,"parentGadget"); // öffnen des eigenen Dialogs shell.openSceneAndWait("../../common/CreateNewItemDialog.box", this.scene, "CreateNewItemDialog", paramDictionary); } component.prototype.insertItem = function (item) { this.items.push(item); this.currentItem = this.items.length - 1; }
Der obige Code bewirkt folgendes:
Die component
Funktion repräsentiert das ToDoList
Gadget. Das OCP Toolkit erstellt eine Instanz des Objekts wenn das Gadget das erste mal instantiiert wird.
Die onInitialized
Funktion liest die Part innerhalb des ToDoList
Gadgets aus, und speichert sie in Variablen für die spätere Verwendung.
Die onCreateItem
Funktion definiert zunächst das paramDictionary
Objekt, ein Basisverzeichnis, das Schlüssel-Wert Paare beinhalten kann. In unserem Fall, ist "parentGadget" der Schlüssel und der WErt eine Referenz zur Instanz des ToDoList
Gadgets. Wir rufen dann die openSceneAndWait
Funktion auf, um das Dialogfenster zu öffnen, das durch die CreateNewItemDialog.box
Datei definiert ist, und übergeben das paramDictionary
Objekt an das Dialogfenster. Wenn des CreateNewItemDialog
Gadget's onInitialized
aufgerufen wird, verwendet es die setCallback
Funktion um eine Referenz zum ToDoList
JavaScript Objekt zu speichern, sodass seine insertItem
Funktion aufgerufen werden kann, wenn ein neuer Eintrag erstellt wurde. Diese Referenz wurde vom Basisverzeichnis der Szene erhalten, die wir durch die openSceneAndWait
Funktion übergeben haben.
Die insertItem
Funktion nimmt einen Parameter, item
, welchen sie zum items
Array hinzufügt. Sie setzt dann die Position der currentItem
Eigenschaft mit der Position des neuen Eintrags im Array gleich.
Schritt 2: Zuweisen von JavaScript Funktionen zum ToDoList Gadget
Als nächstes müssen wir die ToDoList.box
Datei bearbeiten um:
Die ToDoList.js
Datei mit dem ToDoList
Gadget zu verbinden, durch hinzufügen der language
und code
Attribute zur Definition des Gadgets.
Ein behavior
Element hinzufügen um die onInitialized
Funktion aufzurufen.
Der Code, unten fett dargestellt, zeigt wie dies zu tun ist.
<gadget id="ToDoList" language="jscript" code="ToDoList.js" > <parts> <box:titleArea id="titleArea"/> <box:noteArea id="noteArea"/> <box:buttonsArea id="buttonsArea"/> </parts> <behavior> <reaction event="initialized" action="gadget:onInitialized();" /> </behavior> </gadget>
Es ist sicherzustellen, den Script Wert passend zu bearbeiten, damit er auf den richtigen Speicherort der ToDoList.js
Datei verweist.
Schritt 3: Erstellen des "Create New Item" Dialogfensters
Das Create New Item Dialogfenster enthält die Felder und Buttons, die im Bild unten gezeigt sind:
Um ein neues Fenster in unserer Anwendung zu erstellen, müssen wir eine neue .box Datei erstellen, die das Fenster beschreibt, sowie irgendwelche JavaScript Funktionen, die nötig sind um sein Layout zu konstruieren und unterstützen.
Um Zeit zu sparen, wurde die .box Datei, die das "Create New Item" Dialogfenster beschreibt (createNewItemDialog.box
) und seine zugehörige JavaScript Datei (createNewItemDialog.js
) vorbereitet, und befinden sich im ToDoList/common
Verzeichnis.
Einige Funktionen in der createNewItemDialog.js
, die erwähnenswert wären, sind:
appUtils.openFileDialog - Diese Funktion erlaubt es ein gewöhnliches Datei öffnen Fenster zu öffnen, das konfiguriert werden kann, um verschiedene Dateitypen zu akzeptieren. (In unserem Fall, akzeptieren wir nur von Boxely unterstützte Grafikdateitypen.) Während der Laufzeit, wenn der Benutzer eine oder mehr Dateien auswählt und "Öffnen" klickt, werden die ausgewählten Dateipfade und Namen als Ausgabewert der openFileDialog
Funktion zurückgegeben.
scene.close - Diese Funktion schliesst die gesamte Szene. In unserem Fall verwenden wir sie, um die createNewItemDialog
Szene zu schließen, wenn der Benutzer auf "Insert Item" oder "Cancel" klickt.
Falls die "To-Do List" Übungsdateien noch nicht heruntergeladen wurden, kann der Download der benötigten Übungsdateien Teil dieser Anleitung gelesen werden.
Schritt 4: Testen des "Create New Item" Interfaces
Sobald das "Create New Item" Interface heruntergeladen wurde, können wir es testen, indem wir die CreateNewItemDialog.box
Datei ausführen.
Wir sollten ein Fenster sehen, das etwa so aussieht:
Das "Create New Item" Interface testen:
Klicken des "Browse" Buttons und danach ein Bild auswählen.
Klicken des "Cancel" Buttons um sicherzustellen, dass sich das Fenster schließt.
Klicken des "Insert Item" Button bevor ein "Item Title" eingegeben wurde. Es ist sicherzustellen, dass eine Fehlermedung angezeigt wird.
Wenn wir versuchen, alle Felder auszufüllen, und danach auf den "Insert Item" Button klicken, werden wir einen Fehler erhalten. Das ist, weil wir noch nicht mit dem Programmieren der Anwendung fertig sind. Wir müssen uns noch nicht um den Fehler kümmern. Am Ende dieses Kapitels weren alle Funktionen der "To-Do List" Anwendung funktionieren.
Falls nichts geschieht, wenn wir auf einen Button im "Create New Item" Interface klicken, sollten wir die createNewItemDialog.box
Datei öffnen und sicherstellen, dass die zugehörige JavaScript Datei richtig referenziert ist. Für mehr generelle Debugging Tipps und Informationen, kann die Problembehandlungsreferenz zu rate gezogen werden.
Schritt 5: Erstellen von JavaScript Funktionen für das buttonsArea Gadget
Jetzt müssen wir eine JavaScript Datei erstellen, die das buttonsArea
Gadget repräsentiert und die "Create To-Do Item" Funktion instantiiert, durch das Aufrufen der betreffenden Parent Objekt Funktion. (Das Parent Objekt ist die ToDoList
.)
In einem Texteditor, erstellen wir eine neue Datei namens buttonsAreaGadgets.js
fügen folgenden Code hinzu. Es ist sicherzustellen, die Datei im gleichen Verzeichnis zu speichern, in dem sich die anderen "To-Do List" Anwendungsdateien befinden.
// Die component Funktion wird aufgerufen, wenn das Gadget // das erste mal instantiiert wird function component (_gadget) { } // Deklaieren der Eigenschaften zur Verwendung im Gadget component.prototype.parent = null; // Die onInitialized Funktion wird aufgerufen, wenn // das Gadget erstellt wird, aber noch nicht // dargestellt wird (d.h. sichtbar ist) component.prototype.onInitialized = function() { component.prototype.parent = this._gadget.gadgetParent; } /* * Button Befehle * Wir übergeben diese Befehle an das Parent Gadget. * Wir nehmen an, das Parent Gadget weiss was zu tun ist. */ // create new item Befehl component.prototype.onCreateItem = function() { this.parent.onCreateItem(); }
Und so funktioniert es:
Die component
Funktion repräsentiert das buttonsArea
Gadget. Das OCP Toolkit erstellt eine Instany des component Objekts, wenn das Gadget das erste mal instantiiert wird.
Die onInitialized
Funktion verwendet die gadgetParent
Methode um das Parent Objekt zu erhalten, und es in der parent
Eigenschaft zu speichern. (Wie bereits erwähnt, das Parent Objekt ist die ToDoList
.)
Die onCreateItem
Funktion ruft die onCreateItem
Methode auf, die für das Parent Objekt definiert ist. (Wir haben die onCreateItem
Funktion des Parent Objekts in Schritt 1 erstellt.)
Schritt 6: Zuweisen von JavaScript Funktionen zum buttonsArea Gadget
Als nächstes bearbeiten wir die buttonsAreaGadgets.box
Datei:
Zuweisen der buttonsAreaGadgets.js
Datei zum buttonsArea
Gadget durch hinzufügen der language
und code
Attribute der Gadget Definition.
Hinzufügen des on:command
Attributs zum "Create To-Do Item" Button um die onCreateItem
Funktion aufzurufen.
Hinzufügen eines behavior
Elements um die onInitialized
Funktion aufzurufen wenn der initialized
Event auftritt.
Der Code, unten fett hervorgehoben, zeigt wie das zu tun ist.
<library xmlns="http://www.aol.com/boxely/resource.xsd" xmlns:box="http://www.aol.com/boxely/box.xsd" xmlns:s="http://www.aol.com/boxely/style.xsd" xmlns:on="http://www.aol.com/boxely/reaction.xsd" > <gadget id="buttonsArea" language="jscript" code="buttonsAreaGadgets.js" > <parts> <box:hbox id="prevNextButtons"> <box:textButton label="« Prev Note" tooltip="Go to your previous Note."/> <box:hbox s:flex="1"/> <box:textButton label="Next Note »" tooltip="Go to your next Note."/> </box:hbox> <box:button on:command="gadget:onCreateItem();" s:flex="1" defaultButton="true" icon="../../theme/images/iconWrite.png" label="Create To-Do Item" tooltip="Create new To-Do Note." /> <box:hbox> <box:button s:flex="1" icon="../../theme/images/iconClearItem.png" label="Clear To-Do Item" tooltip="Remove this Note from your list."/> <box:button s:flex="1" icon="../../theme/images/iconClearList.png" label="Clear To-Do List" tooltip="Remove all Notes from your list."/> </box:hbox> </parts> <behavior> <reaction event="initialized" action="gadget:onInitialized();" /> </behavior> </gadget> <style tag="buttonsArea" height="88" orient="vertical" > <part name="prevNextButtons" flex="1" margin="0 0 12 0"/> </style> </library>
Es ist sicherzustellen, den Script Wert passend zu bearbeiten, damit er auf den richtigen Speicherort der buttonsAreaGadgets.js
Datei verweist.
Schritt 7: Testen der Anwendung
Wenn wir jetzt die "To-Do List" Anwendung ausführen, sollte es und möglich sein, den "Create New Item" Button auszuwählen und danach Informationen über den neuen Eintrag einzugeben, wie in den Bildern hier gezeigt:
Tabelle 4.6. Einen neuen To-Do List Eintrag erstellen
![]() |
![]() |
"Create To-Do Item" auswählen |
Informationen über den neuen Eintrag eingeben und "Insert Item" klicken |
Während das ein guter Anfang ist, so ist dennoch etwas mehr zu tun. Wir fahren mit dem nächsten Teil fort, um die noteArea
und ToDoList
Gadgets so zu programmieren, dass sie Einträge im items
Bereich anzeigen.