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.