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.