In der letzten Übung dieses Kapitels, werden wir die restlichen Buttons im buttonsArea Gadget programmieren: Prev Note, Next Note, Clear To-Do Item, und Clear To-Do List.
Da diese Buttons die Hauptdaten in der Anwendung manipulieren, werden die buttonsArea Funktionen Funktionen, die im Parent Objekt (die ToDoList) definiert sind, aufrufen, wo der items Array gespeichert ist.
Um die Übung abzuschließen, gehen wir folgender maßen vor:
Schritt 1: Hinzufügen von JavaScript Funktionen zum ToDoList Gadget - Hinzufügen folgender neuer Funktionen zur JavaScript Datei, die mit dem ToDoList Gadget verbunden ist: onPreviousItem, onNextItem, onClearItem, onClearAllItems, und deleteItem. Diese Funktionen zeigen und löschen items im Array.
Schritt 2: Hinzufügen von JavaScript Funktionen zum buttonsArea Gadget - Hinzufügen folgender neuer Funktionen zur JavaScript Datei, die mit dem buttonsArea Gadget verbunden ist: onPreviousItem, onNextItem, onClearItem, und onClearAllItems. Diese Funktionen rufen die entsprechende Funktion des Parent Objekts auf (die ToDoList). Wichtig, der items Array ist eine Eigenschaft des ToDoList Gadgets. Deshalb müssen alle Kernfunktionen, die Eintragsdaten beeinflussen vom ToDoList Gadget ausgeführt werden.
Schritt 3: Zuweisen der JavaScript Funktionen zum buttonsArea Gadget - Modifizieren der Definition des buttonsArea Gadgets, um die betreffende Funktion aufzurufen, wenn die "Prev Note", "Next Note", "Clear To-Do Item", und "Clear To-Do List" Buttons geklickt werden.
Schritt 4: Testen der Anwendung - Ausführen der "To-Do List" Anwendung und sicherstellen, dass sie folgendes kann: mehrere "to-do" Einträge erstellen, verwenden der "Prev Note" und "Next Note" Buttons, um durch diese Einträge zu navigieren, und verwenden der "Clear To-Do Item" und "Clear To-Do List" Buttons zum löschen von Einträgen.
Schritt 1: Hinzufügen von JavaScript Funktionen zum ToDoList Gadget
Zuerst müssen wir JavaScript Funktionen zum ToDoList Gadget hinzufügen, um den vorigen oder nächsten Eintrag im items Array anzuzeigen. Zusätzlich müssen wir Funktionen definieren, um einen oder alle Einträge aus dem items Array zu löschen.
Wir öffnen die ToDoList.js Datei und fügen folgende Funktionen hinzu:
// Navigationsfunktionen
component.prototype.onPreviousItem = function ()
{
shell.print("ToDoList::onPreviousItem");
this.displayItem(this.currentItem - 1);
}
component.prototype.onNextItem = function ()
{
shell.print("ToDoList::onNextItem");
this.displayItem(this.currentItem + 1);
}
// Entfernen Funktionen
component.prototype.onClearItem = function ()
{
shell.print("ToDoList::onClearItem");
// Einblenden eines Bestätigungsdialogs
var confirmed = this.scene.confirm
("Are you sure you want to remove the item?", "Remove this item?");
if (confirmed.results)
{
// Löschen des aktuellen Eintrags
this.deleteItem(this.currentItem);
this.displayCurrentItem();
}
}
component.prototype.onClearAllItems = function ()
{
shell.print("ToDoList::onClearAllItems");
// Einblenden eines Bestätigungsdialogs
var confirmed = this.scene.confirm
("Are you sure you want to remove all the items?", "Remove ALL items?");
if (confirmed.results)
{
// Löschen aller Einträge
while (this.items.length > 0)
{
this.deleteItem(0);
}
this.displayCurrentItem();
}
}
component.prototype.deleteItem = function (index)
{
if (this.items == null || this.items[index] == null) { return; }
this.items.splice(index, 1);
}
Und so funktioniert es:
Die onPreviousItem Funktion ruft die displayItem Funktion auf, und übergibt den Index des vorigen Eintrags im items Array an die displayItem Funktion.
Die onNextItem Funktion ruft die displayItem Funktion auf, und übergibt den Index des nächsten Eintrags im items Array an die displayItem Funktion.
Die onClearItem Funktion fragt den Benutzer um Bestätigung, dass er oder sie den Eintrag löschen möchte. Wenn der Benutzer Ja auswählt wird die deleteItem Funktion aufgerufen, und der Index des aktuellen Eintrags im items Array an die deleteItem Funktion übergeben. Dann wird die displayCurrentItem Funktion aufgerufen.
Die onClearAllItems Funktion fragt den Benutzer um Bestätigung, dass er oder sie alle Einträge löschen möchte. Wenn der Benutzer bestätigt durchläuft di Funktion alle Einträge im items Array, und ruft die deleteItem Funktion auf, um den aktuellen Eintrag in jeder Wiederholung zu löschen. Nach abschließen des Vorgangs wird die displayCurrentItem Funktion aufgerufen.
Die deleteItem Funktion überprüft zunachst den Wert der ihr übergeben wurde. Falls der Index null ist, oder falls ein Eintrag im items Array für den festgelegten Index Wert nicht existiert, wird die Funktion beendet ohne etwas zu tun. Andernfalls, wenn der Index nicht null ist und der Eintrag der duch den Index festgelegt wurde im items Array existiert, wird die splice Methode aufgerufen, um den Eintrag zu löschen.
Schritt 2: Hinzufügen von JavaScript Funktionen zum buttonsArea Gadget
Als nächstes müssen wir JavaScript Funktionen zum buttonsArea Gadget hinzufügen um die betreffende Parent Objekt Funktion aufzurufen, wenn ein Button geklickt wird.
Wir öffnen die buttonsAreaGadgets.js Datei und fügen folgenden Code hinzu:
// Navigationsbefehle
component.prototype.onPreviousItem = function()
{
this.parent.onPreviousItem();
}
component.prototype.onNextItem = function()
{
this.parent.onNextItem();
}
// Entferne Eintrag oder Einträge aus der To-Do List
component.prototype.onClearItem = function()
{
this.parent.onClearItem();
}
component.prototype.onClearAllItems = function()
{
this.parent.onClearAllItems();
}
Schritt 3: Zuweisen der JavaScript Funktionen zum buttonsArea Gadget
Um Funktionen aufzurufen, wenn Buttons geklickt werden, bearbeiten wir die buttonsAreaGadgets.box Datei, wie unten fett formatiert gezeigt:
<gadget id="buttonsArea" language="jscript"
code="buttonsAreaGadgets.js" >
<parts>
<box:hbox id="prevNextButtons">
<box:textButton on:command="gadget:onPreviousItem();"
label="« Prev Note" tooltip="Go to your previous Note."/>
<box:hbox s:flex="1"/>
<box:textButton on:command="gadget:onNextItem();"
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 on:command="gadget:onClearItem();" s:flex="1"
icon="../../theme/images/iconClearItem.png"
label="Clear To-Do Item" tooltip="Remove this Note from your list."/>
<box:button on:command="gadget:onClearAllItems();" 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>
Schritt 4: Testen der Anwendung
Nach dem Abschließen der vorigen drei Schritte, sollten wir die "To-Do List" Anwendung auszuführen können und:
Mindestens zwei "to-do" Einträge erstellen.
Durch die "to-do" Einträge in unserer Liste mit den "Prev Note" und "Next Note" Buttons navigieren.
Einen "to-do" Eintrag aus der Liste löschen.
Alle "to-do" Einträge aus der Liste löschen.