Registrieren Hilfe Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren
Zurück   HP webOS Forum > HP webOS > webOS Entwickler Forum


Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf PreForum.de!

Eventhandler unter Ares

Das Thema "Eventhandler unter Ares" befindet sich unter webOS Entwickler Forum auf PreForum.de.

Antwort

 

LinkBack Themen-Optionen Ansicht
Alt 23.05.2010, 16:36   #1 (permalink)
Neuer Benutzer
 
Benutzerbild von zaungast
 
Registriert seit: 17.05.2010
Beiträge: 8
Frage Eventhandler unter Ares

Hallo Leute,

ich hab unter Ares ein programm halb im Designer halb in der htmldatei gemacht. Für ein Widget in der htmldatei habe ich einen Eventhandler aufgestellt:

Mojo.Event.listen(this.controller.get("setButton") , Mojo.Event.tap, this.setButton.bind(this));

das klappt auch.

Die aufgerufene Funktion klappt aber nicht:

SceneAssistant.prototype.setButton = function(event){
....
}

Was mache ich falsch? (die Szene heist main (standart))

grüsse, zaungast.
zaungast ist offline   Mit Zitat antworten
Alt 24.05.2010, 02:06   #2 (permalink)
Super-Moderator
 
Benutzerbild von jpohl
 
Registriert seit: 28.01.2010
Ort: Dresden
Beiträge: 1.562
Standard AW: Eventhandler unter Ares

Zitat:
Zitat von zaungast Beitrag anzeigen
ich hab unter Ares ein programm halb im Designer halb in der htmldatei gemacht.
ein Mischen von Ares und klassischer SDK innerhalb einer Scene halte ich für keinen guten Ansatz.
Wenn schon eine Mischung stattfinden muss, dann sollten wenigstens die Szenen in sich konsistent sein. Vollständig von Ares generierte Scenen und klassisch erstellte Scenen in einem Ares-Programm sollten sich vertragen.

Ares bastelt einen Overhead dazu, der zur Laufzeit die visuell erstellten Elemente in eine Art temporärer html entpackt. Du hast keinerlei Möglichkeiten zu sehen, was da dann im Hintergrund generiert wird und wie sich das bei einer gemischten Scene mit Deinem html-code verträgt.

Viele Grüße
Jörg
jpohl ist offline   Mit Zitat antworten
Alt 26.05.2010, 17:36   #3 (permalink)
Neuer Benutzer
 
Benutzerbild von zaungast
 
Registriert seit: 17.05.2010
Beiträge: 8
Standard

Sehe ich auch genauso, Mischungen sind nichts ganzes und führt auf Dauer zu einem schlecht wartbarem Programm. Ich würde das auch gerne in eine Andere Szene packen. Vom Prinzip ist es auch ganz einfach was ich machen will:

Die Person klickt auf ein Feld, darauf wird eine neue Szene gepusht oder der Inhalt verändert sich.

Der Nutzer kann das Label eines Feldes im Stundenplan verändern in dem er in ein Textfeld etwas eingibt.


In der cleanup Funktion wird dann die Eingabe automatisch gespeichert



Wenn ich aber in einer anderen Szene eine Eingabe mache, die sich auf eine ganz andere Szene auswirkt, muss ich doch eine globale Variable haben oder wie soll ich das sonst anstellen?(Die kriege ich nicht hin)

Viele Grüße, Zaungast

Geändert von zaungast (26.05.2010 um 17:41 Uhr)
zaungast ist offline   Mit Zitat antworten
Alt 26.05.2010, 17:58   #4 (permalink)
Super-Moderator
 
Benutzerbild von jpohl
 
Registriert seit: 28.01.2010
Ort: Dresden
Beiträge: 1.562
Standard AW: Eventhandler unter Ares

Zitat:
Zitat von zaungast Beitrag anzeigen
Wenn ich aber in einer anderen Szene eine Eingabe mache, die sich auf eine ganz andere Szene auswirkt, muss ich doch eine globale Variable haben oder wie soll ich das sonst anstellen?(Die kriege ich nicht hin)
hmm, da haben sich schon vor Jahren Herschaften von Softwareleuten den Kopf drüber zerbrochen, eine sinnvolle Lösung nennt sich Document/View-Architecture.
Vereinfacht gesagt steckt dahinter die Trennung von zentraler Datenhaltung und GUI. Und genau das ist es eigentlich, was Dir auch bei Deinem Problem hilft. Du machst ein zentrales Datenobjekt. In einer View wird dieses Datenobjekt geladen, damit erstmal was sinnvolles angezeigt wird. Jetzt können in einer anderen View die Daten manipuliert werden, es muss nur Sorge getragen werden, dass die anderen noch aktiven Views von den Änderungen benachrichtigt werden.
Ist die ursprüngliche View (Mainform) inaktiv, so reicht es wenn beim (re-)aktivieren die Daten neu ausgelesen werden. Damit werden dann die Änderungen übernommen.

Nochmal vereinfacht als Übersicht:
1. Mainform wird geladen und wird mit Daten aus Datenobjekt initialisiert
2. Benutzer manipuliert Daten über das Mainform und schreibt diese Änderungen sofort ins Datenobjekt zurück
3. Benutzer aktiviert Detailform / Mainform wird inaktiv
4. Detailform wird geladen und wird mit Daten aus Datenobjekt initialisiert
5. Benutzer manipuliert Daten über das Detailform und schreibt diese Änderungen sofort ins Datenobjekt zurück
6. Benutzer deaktiviert Detailform / Mainform wird reaktiviert und mit Daten aus Datenobjekt reinitialisiert
7. Benutzer manipuliert Daten über das Mainform und schreibt diese Änderungen sofort ins Datenobjekt zurück
...


HTH und Viele Grüße
Jörg
jpohl ist offline   Mit Zitat antworten
Alt 26.05.2010, 18:21   #5 (permalink)
Neuer Benutzer
 
Benutzerbild von zaungast
 
Registriert seit: 17.05.2010
Beiträge: 8
Standard

Zitat:
1. Mainform wird geladen und wird mit Daten aus Datenobjekt initialisiert
2. Benutzer manipuliert Daten über das Mainform und schreibt diese Änderungen sofort ins Datenobjekt zurück
3. Benutzer aktiviert Detailform / Mainform wird inaktiv
4. Detailform wird geladen und wird mit Daten aus Datenobjekt initialisiert
5. Benutzer manipuliert Daten über das Detailform und schreibt diese Änderungen sofort ins Datenobjekt zurück
6. Benutzer deaktiviert Detailform / Mainform wird reaktiviert und mit Daten aus Datenobjekt reinitialisiert
7. Benutzer manipuliert Daten über das Mainform und schreibt diese Änderungen sofort ins Datenobjekt zurück
...
Aber wie kann ich eine globale Variable machen? (sie muss von beiden Szenen greifbar sein)

Ich habe eben gerade noch versucht eine variable der anderen Szene zu übergeben via

a = this.$.Mo1kuerzel;
this.controller.stageController.pushScene("Eingabe ", a);


In der Szene Eingabe habe ich die dann so initialisiert:

function EingabeAssistant(a, b, c, d, e) {
this.fachkuerzel = a;
}

activate: function() {
this.controller.get("fachkuerzel").update(this.fac hkuerzel);
}


Das .update(this.fachkuerzel) habe ich aus dem Building your first App aus dem Palm Developer Center entnommen. Allerings scheint es nicht der richtige Weg zu sein, denn in dem Textfeld stand dann das:

Mo1kuerzel: Palm.Mojo.Label.

Ich habe also nur das raus bekommen, was für ein Objekt Mo1kuerzel ist, und nicht den Inhalt. Außerdem war der Wert unveränderlich.
Wie muss ich denn meinen Code verändern um damit ein vernünftige Ausgabe bekomme (ich muss ja auch den Wert ändern können)?

Mit freuntichen Grüßen,
zaungast

Geändert von zaungast (26.05.2010 um 18:36 Uhr)
zaungast ist offline   Mit Zitat antworten
Alt 26.05.2010, 18:54   #6 (permalink)
Super-Moderator
 
Benutzerbild von jpohl
 
Registriert seit: 28.01.2010
Ort: Dresden
Beiträge: 1.562
Standard AW: Eventhandler unter Ares

Zitat:
Zitat von zaungast Beitrag anzeigen
Aber wie kann ich eine globale Variable machen? (sie muss von beiden Szenen greifbar sein)
das haben globale Variablen normalerweise so an sich

Es gibt bestimmt sehr viele Wege das zu tun. Ich kann hier nur schreiben wie ich das für mich löse, das muss auch nicht allen Anforderungen genügen, hat sich aber hier bewährt.
Und zwar habe ich ein Datenobjekt (eben nach Vorbild Document/View), sinnvollerweise mit nem markanten und kurzen Namen um Schreibarbeit zu sparen. Dieses Objekt sitzt in einem extra File, einheitlicherweise unter /app/models (habe ich aus dem Palm WebOS Buch)

In meinem aktuellen Programm sieht das z.B. in der /app/models/moon.js wie folgt aus:
Code:
Moon = {
    versionString: "",
    _Cookie: null,
    MenuAttr: {
        omitDefaultItems: true
    },
    Locale: "en",
    bTestMode: true
};
Jetzt kannste dieses Objekt auch noch Schritt für Schritt um zusätzliche Members (Variablen und Funktionen) ergänzen.
Z.B.
Code:
Moon.Preferences = {
    sVersion: "",
    iDistUnit: 1
};
So, wenn Du jetzt von Deinen Scenen drauf zugreifen möchtest brauchste nur in dem entsprechenden Kontext drauf zuzugreifen z.B.
Code:
Moon.Preferences.iDistUnit = 0;
Das kannst Du von jeder Scene aus machen.

Zitat:
Ich habe eben gerade noch versucht eine variable der anderen Szene zu übergeben via

a = this.$.Mo1kuerzel;
this.controller.stageController.pushScene("Eingabe ", a);


In der Szene Eingabe habe ich die dann so initialisiert:

function EingabeAssistant(a, b, c, d, e) {
this.fachkuerzel = a;

....
Ich wäre generell mit dieser Art von Parameterübergabe an eine Scene vorsichtig, ich weiß jetzt nicht, ob da im Hintergrund noch Systemparameter mit übergeben werden. Wenn überhaupt, geht das auch nur in eine Richtung. JavaScript nutzt Call By Value, das heißt Variablen können als lokale Parameter nicht zurückgegeben werden.

Viele Grüße
Jörg
jpohl ist offline   Mit Zitat antworten
Alt 28.06.2010, 17:40   #7 (permalink)
Neuer Benutzer
 
Benutzerbild von zaungast
 
Registriert seit: 17.05.2010
Beiträge: 8
Standard

Hallo,

ich habe das gemacht, was mir hier gesagt wurde:

ich habe eine globale Variable erstellt:

alt = {
"kuerzel":"",
"fach":"",
"lehrer":"",
"raum":""
};


Darauf habe ich dann zugegriffen:

alt.fach = $L(event.item.fach);
...
was mache ich hier falsch?

Das ziel ist es, den inhalt aus einer Liste zu übergeben wenn eine Spalte angeklickt wurde

Viele grüsse,
Zaungast

Ps. ich bin echt froh, das ich hier schon gute Ratschläge bekommen hab
zaungast ist offline   Mit Zitat antworten
Alt 28.06.2010, 18:21   #8 (permalink)
Neuer Benutzer
 
Benutzerbild von zaungast
 
Registriert seit: 17.05.2010
Beiträge: 8
Standard Update

Ich weiss nicht warum, aber jetzt fuzzts...

grüsse,
Zaungast
zaungast ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an



Alle Zeitangaben in WEZ +2. Es ist jetzt 18:47 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.3.2