![]() |
AW: Wie / Womit werden Webanwendungen designt ?
EinProblem ist für mich auch die schiere Menge an Frameworks. Da wird man ja schierlich von erschlagen. Ich habe mir auch das aktuelle Sonderheft der IX "Javascript Heute" geholt, aber da werden auch nur verschiedene Frameworks vorgestellt. Auf der englischen Wikipedia gibt es eine Tabelle, mit unterschiedlichen Frameworks.
Für mich ist als Delphi C# Winforms Entwickler ist wie schon oben geschrieben das Design ein noch größeres Rätsel. Bisher in allen Tutorials habe ich nur gesehen wie einige Textboxen / Grids von Hand angelegt und befüllt werden. Jetzt kommen ja so Kommentare wie " Dafür gibt es auch einen "WYSYWYG"-Editor von Sencha. Ob man den braucht, sei mal dahingestellt". Was ist denn der Nachteil wenn ich das mit einem solchen Editor mache ? Meine Delphi Anwendung wird ja auch so erstellt ? Bzw. was ist der Vorteil wenn ich alles von Hand erstelle ? Angularjs. Gibt es auch einiges drüber zu lesen und klingt auch ganz interessant. Aber wie erstelle ich denn damit eine Seite mit verschiedenen Controls (Radiobuttons, Checkbox, Edits) ? Da fehlt bei mir noch der Klick. In Delphi kann ich ja wenn ich möchte ein Formular einfach zusammen klicken. Wenn ich so an meine Vergangenheit denke, fallen mir genügend Fälle ein, wo jemand ankam und sagte da muss noch ein Knopf hin, der folgendes bewirkt. Vielleicht sehe ich noch nicht de großen Vorteil, darum bitte ich um Erklärung Für mich ist immer ein schönes Beispiel die Fritzbox. Die hat ja viele verschiedene Einstellmöglichkeiten, die grafisch ansprechend (für mich) dargestellt wird. Wie haben die Entwickler von AVM so etwas erstellt ? (Ich weiß dass zumindest teile in LUA geschrieben worden sind) |
AW: Wie / Womit werden Webanwendungen designt ?
Von Codegear/Emba gibt es auch "Delphi for PHP" bzw. RadPHP und HTML5 Builder.
Ganz "billig" geht auch TidHTTPServer. HTML-Datei ausgeben und dann entsprechend die GET/POST-Daten auswerten. z.B.: Ein billiger File-Server, welcher eine HTML-Webseite und Zusatzdateien ausliefert. Das hatte ich mir implementiert: - OnCommandGet (GET) - OnException - OnListenException geht auch: - OnCommandOther (POST?) - und dazu dann noch eine Authentifizierungs- und Session-Behandlung (für ein Login der Benutzer) So wie bei
Delphi-Quellcode:
kann man auf bestimmte URLs aka "Befehle" reagieren und dort entsprechende Webseiten ausliefern.
HTMLPath = 'info'
Und ansonsten werden die Dateien in einem bestimmten Verzeichnis (Path_Help) ausgeliefert. (Bilder, CSS, JS, hartcodierte HTML-Seiten usw.) In die HTML-Dateien kommen dann noch ein paar ![]() Das HTML kann im Programm dynamisch zusammengesetzt werden, wofür es auch entsprechende Frameworks gibt, oder es kommt aus externen Dateien/Resourcen und da werden per StringReplace eventuell noch ein paar Platzhalter aufgefüllt.
Delphi-Quellcode:
procedure TMyService.HTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
const // http://de.selfhtml.org/diverses/mimetypen.htm FileExt: array[0..7] of string = ('', '.txt', '.html', '.css', '.js', '.gif', '.jpeg', '.png'); ContentType: array[0..7] of string = ('application/octet-stream', 'text/plain', 'text/html', 'text/css', 'text/js', 'image/gif', 'image/jpeg', 'image/png'); var HTMLPath: string; begin try HTMLPath := ARequestInfo.Document; while (HTMLPath <> '') and CharInSet(HTMLPath[1], ['/', '\', '.', ':']) do Delete(HTMLPath, 1, 1); if HTMLPath = 'info' then begin LogEvent('WebServer-Get 200: ' + ARequestInfo.URI + ' => ' + ARequestInfo.From); AResponseInfo.ContentType := 'text/plain'; AResponseInfo.ResponseNo := 200; AResponseInfo.ResponseText := 'OK'; AResponseInfo.ContentText := 'ServiceName: ' + DataServer1.ServiceName + #10 + 'ServicePath: ' + ParamStr(0) + #10 + 'ServerName: ' + TDSServerMethods(nil).ServerComputerName + #10 // geht, da ServerComputerName auf nichts einer TDSServerMethods-Instanz zugreift + #10 + 'HelpName: ' + HTTPServer1.ServerSoftware + #10 + 'HelpPort: ' + IntToStr(HTTPServer1.DefaultPort) + #10 + 'HelpPath: ' + Path_Help + #10; end else if (Trim(HTMLPath) = '') or (TPath.GetExtendedPrefix(HTMLPath) <> TPathPrefixType.pptNoPrefix) or not TPath.HasValidFileNameChars(HTMLPath, False) then begin LogEvent('WebServer-Get 403: ' + ARequestInfo.URI + ' => ' + ARequestInfo.From); AResponseInfo.ContentType := 'text/plain'; AResponseInfo.ResponseNo := 403; AResponseInfo.ResponseText := 'Forbidden'; AResponseInfo.ContentText := '403 Forbidden'#10#10 + HTMLPath; end else if not FileExists(Path_Help + HTMLPath) then begin LogEvent('WebServer-Get 404: ' + ARequestInfo.URI + ' => ' + ARequestInfo.From); AResponseInfo.ContentType := 'text/plain'; AResponseInfo.ResponseNo := 404; AResponseInfo.ResponseText := 'Not Found'; AResponseInfo.ContentText := '404 Not Found'#10#10 + HTMLPath; end else begin LogEvent('WebServer-Get: ' + ARequestInfo.URI + ' => ' + ARequestInfo.From); AResponseInfo.ContentType := ContentType[Max(IndexText(ExtractFileExt(HTMLPath), FileExt), 0)]; AResponseInfo.ResponseNo := 200; AResponseInfo.ResponseText := 'OK'; AResponseInfo.ContentStream := TFileStream.Create(Path_Help + HTMLPath, fmOpenRead or fmShareDenyWrite); // Daten AResponseInfo.ContentLength := AResponseInfo.ContentStream.Size; // Datenmenge AResponseInfo.CacheControl := 'public'; // Browsercache verwenden AResponseInfo.Date := TFile.GetLastWriteTime(Path_Help + HTMLPath); // Änderungsdatum AResponseInfo.ETag := Format('%d_%.5f', [AResponseInfo.ContentLength, AResponseInfo.Date]); // (billiger) Hash end; except on E: Exception do begin LogEvent('WebServer-Get-Error: ' + ARequestInfo.URI + ' => ' + ARequestInfo.From + sLineBreak + E.ClassName + ': ' + E.Message); AResponseInfo.ContentType := 'text/plain'; AResponseInfo.ResponseNo := 500; AResponseInfo.ResponseText := 'Internal Error'; AResponseInfo.ContentStream.Free; AResponseInfo.ContentStream := nil; AResponseInfo.ContentLength := 0; AResponseInfo.ContentText := '500 Internal Error'#10#10 + E.ClassName + ': ' + E.Message + #10#10 + HTMLPath; AResponseInfo.CacheControl := ''; AResponseInfo.Date := 0; AResponseInfo.ETag := ''; end; end; end; |
AW: Wie / Womit werden Webanwendungen designt ?
Vielleicht wäre auch
![]() |
AW: Wie / Womit werden Webanwendungen designt ?
Zitat:
ExtJS folgt einem MVC(S) Pattern. Das heißt du definierst deine Models als Javascript-Code. Views kannst du dir dann - ebenfalls mit purem Javascript - aus den Komponenten zusammenbauen, die das Framework bereitstellt (und da ist ja alles dabei, was du so angedeutet hast). HTML schreibst du außer einer Index-Seite in die das ganze eingebettet wird quasi garnicht. Wo sich das Framework etwas vom Rest abhebt ist der S-Teil in MVC(S). S steht für Store und heißt dass du zu deinen Models jeweils noch definieren kannst, wie sie auf dem Server zu speichern und von diesem zu laden sind (üblicherweise REST/JSON-Serialisierung an ein Backend, das du implementieren kannst, womit immer du willst). Schau dir doch einfach die Demos an, es gibt reichlich davon. |
AW: Wie / Womit werden Webanwendungen designt ?
Zitat:
|
AW: Wie / Womit werden Webanwendungen designt ?
..also ich bin mit UniGui sehr sehr zufrieden!
Delphi Xe4 Firebird 2.5 Zeos Lib UniGui XAMPP Einzige "Schwachstelle" ist m.M.n. - wenn man mehrere UNIDBGrids auf einem Fenster hat - dann wirds a bisserl langsam .. um Datenbankinhalte "schneller" darzustellen, nutze ich einen TUniHTMLFrame und füttere diesen mit:
Delphi-Quellcode:
while not unimainmodule.ZEINMAL.Eof do
begin s:= unimainmodule.ZEINMAL.fieldbyname('OBJECT_NAME').AsString; wo_01.HTML.Append('<p class="hoverpanel myUnselectable" onclick="ajaxRequest(data.UniMemo1,''Panelclick'' , [ ''Parameter01=03'' , ''Parameter02=03'' ])";>'+s+''); wo_01.HTML.Append('<input class="hoverbutton myUnselectable" type="button" value="Eintrag löschen" onclick="ajaxRequest(data.UniMemo1,''delete Record'' , [ ''Parameter01=93'' , ''Parameter02=93'' ])"; />'); wo_01.HTML.Append('</p>'); unimainmodule.ZEINMAL.Next; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz