Wo irre ich mich über mein Projekt und diese Javascript Frameworks?


107

Zunächst einmal ist das wichtigste Element des Projekts, das ich erstellen möchte, eine Wiki-Engine, die als Web-App für eine einzelne Seite implementiert ist. Ich habe vor, von Anfang an eine Reihe von Funktionen mit zahlreichen zusätzlichen Funktionen zur Verfügung zu haben.

Grundfunktionen

  • Seitenerstellung (erstellt sowohl einen Wiki-Artikel als auch ein Diskussionsforum für diesen Artikel)
  • Markup und WYSIWYG ala Markitup
  • On-the-Fly-Konvertierung zwischen Markup / HTML / WYSIWYG
  • eine Seitenleiste zur schnellen Navigation
  • Eine obere Symbolleiste zur Auswahl von Bearbeiten / Anzeigen

Erweiterte Funktionen

  • konfigurierbare Seitenleiste zum Navigieren über verschiedene Methoden
  • konfigurierbare Symbolleiste (möglicherweise Markup-Sprache Ihrer Wahl hinzufügen)
  • Stichworte
  • bearbeitbare Aufgaben
  • Datei-Uploads und Bildanhänge per Drag & Drop

Die Engine bestand ursprünglich aus der grundlegendsten Seitenerstellung, Markup- und WYSIWYG-Bearbeitung sowie dem Speichern. Ich möchte diese grundlegende Engine eventuell mit Drag & Drop-Bildunterstützung, Datei-Uploads, Live-Datendiagrammen und einer Seitenleiste zum Anpassen von Ansichten erweitern.

Ich habe eine ziemlich umfangreiche Suche nach einem anständigen Projekt durchgeführt, auf dem mein Projekt basieren kann, aber außer TiddlyWiki scheint es keine guten Javascript-basierten Wiki-Engines zu geben. Ich habe auch darüber nachgedacht, Jquery auf vorhandene Wiki-Engines anzuwenden, aber ich glaube, ich würde es letztendlich sowieso umschreiben (außerdem ist es nur aufregender, die gewünschten Funktionen hinzuzufügen, wenn ich gehe). So oder so bin ich dazu gekommen, dieses Biest mit einer Javascript-Bibliothek + Framework zu implementieren.

Ich weiß, dass man einige dieser Frameworks nicht wirklich miteinander vergleichen kann, da es sich nicht um Äpfel mit Äpfeln handelt. Ich habe versucht, Vergleichskommentare / -fragen mit vergleichbaren Teilen der jeweiligen Frameworks zu verknüpfen, bin jedoch offen für Korrekturen.

Auf geht's:

Aufgrund meiner eigenen Recherchen und Meinungen habe ich die Liste auf die folgenden Punkte eingegrenzt. Ich habe absichtlich Dinge wie SproutCore, corMVC, YUI und andere weggelassen, da ich in meiner begrenzten Kapazität dachte, dass die folgenden Elemente besser passen würden.

Meine Optionen


jquery / UI + backbonejs

Insgesamt

Nach dem, was ich gelesen habe, wird diese Kombination von vielen benutzt und geliebt und ist sehr flexibel und erweiterbar. Mein Hauptanliegen ist, dass diese Kombination einfach nicht der beste Ausgangspunkt für die Entwicklung einer eher desktoporientierten Benutzeroberfläche ist.

Benutzeroberfläche

Obwohl jQueryUI oder jqueryTools möglicherweise wettbewerbsfähig sind, scheinen sie sicherlich nicht mit den UI-Funktionen anderer Frameworks mithalten zu können. Insbesondere scheinen sie die Effekte stark zu beeinträchtigen, es fehlt ihnen jedoch an einer angemessenen Unterstützung für das Schneiden von Layouts.

javascriptMVC

Insgesamt

JavascriptMVC scheint mir im Wesentlichen eine Erweiterung von jquery + MVC (jqueryMX) zu sein, zusammen mit einigen anderen Apps für die Dokumentation (documentJS), Funktionstests (funcUnit) und das Code- und Abhängigkeitsmanagement (stehlenJS). Abgesehen von den Vorteilen des zusätzlichen Moduls denke ich, dass die funktionale Debatte wirklich auf backbonejs vs. jqueryMX hinausläuft. Bin ich damit richtig und hat jemand mit beiden gearbeitet oder sie verglichen?

  • Features: Jupiter (Hersteller von jMVC) Übersicht über ihre Features
  • Link zu jqueryMX

Benutzeroberfläche

JavascriptMVC fügt die MXUI- Elemente zusätzlich zu den für Jquery verfügbaren Elementen hinzu, sodass ich zumindest denke, dass dies ein leichter Gewinn in dieser Kategorie ist.

Knockoutjs

Insgesamt

Meine Gedanken und Bedenken dazu sind den Kommentaren zu jquery + backbone sehr ähnlich. Beide scheinen ähnliche Funktionen zu bieten, jedoch nur aus einer anderen Perspektive. Ein oft genannter Nachteil ist, dass Knockoutjs Geschäftslogik und Präsentation zu eng mit den Datenbindungen verbindet und dass diese Bindungsmethode für komplexe UI-Interaktionen zusammenbrechen kann, aber ich würde gerne hören, warum dies kein Problem ist.

Benutzeroberfläche

Im Moment leer

Dojo & ExtJS

Insgesamt

Ich werde die Diskussion Dojo und ExtJS kombinieren, weil ich am wenigsten über sie weiß und sie auf fast demselben Raum zu spielen scheinen. Die meisten Informationen zum Stapelüberlauf über diese beiden scheinen veraltet zu sein. Ich habe gesehen, dass es sich bei beiden um große Frameworks handelt, die sich gut für die Implementierung von Desktop-Apps eignen. Dojo war wegen schlechter Dokumentation getadelt worden, aber das scheint nicht mehr der Fall zu sein. ExtJS hat natürlich die kommerzielle Lizenz, aber es ist wirklich vernünftig für das, was Sie bekommen, und ich würde das nicht zu sehr dagegen halten. Die Widgets in ExtJS scheinen etwas professioneller zu sein als Dojo, aber ich könnte dort sicherlich korrigiert werden. Es würde mich interessieren, von jemandem zu hören, der Erfahrung in beiden Bereichen hat.

Benutzeroberfläche

Dojo verfügt über die Dijit- UI-Bibliothek ExtJS verfügt über UI-Funktionen, die sich jedoch nicht im Ext-Kern befinden. Hier ist die Dokumentation und hier sind ihre Demos

Cappuccino

Insgesamt

Und dann ist da noch Cappuccino. Kein CSS, kein HTML, aber es könnte auch schwierig sein, vorhandene Javascript-Bibliotheken zu verwenden. Objective-J scheint nicht beängstigend zu sein, besonders wenn man bedenkt, dass sie auch einfaches Javascript schreiben können. Die Demos sind beeindruckend und scheinen den Anforderungen der Benutzeroberfläche für die Wiki-Engine sehr nahe zu kommen. Die kakaobasierte API ist eine Menge für jemanden, der nicht damit vertraut ist, aber vielleicht lohnt es sich. Ich habe gehört, dass die Layout-Engine nicht immer einfach zu bedienen ist, aber eine junge und möglicherweise störende Technologie wie diese wird sicherlich einige Mängel aufweisen.

Benutzeroberfläche

Im Moment leer

Ich entschuldige mich dafür, dass ich so viel geschrieben habe, aber hey, zumindest ist es keine Frage zwischen Axt und Y und Z, in der Hoffnung auf jede Menge billiger Antworten. Also was denkst du? Was sollte die Basis für meine Desktop-ähnliche Wiki-Engine sein, die mit der Zeit hoffentlich funktionsreicher (komplexer lesen) wird?


9
+1 für eine unglaublich detaillierte und gut durchdachte Frage!
Sean Vieira

8
Ich bin mir nicht sicher über Ihre Zeitachse und Ressourcen, aber wenn ich versuche, mich zwischen mehreren Frameworks / Umgebungen zu entscheiden, versuche ich einfach, schnell einen Prototyp zu erstellen. Selbst wenn es nur eine oder zwei Hauptfunktionen sind, finde ich, dass alle Recherchen und Dokumentationen der Welt niemals mit dem Versuch übereinstimmen werden, tatsächlich etwas mit den Werkzeugen zu bauen. Ich sage, nimm dir einen Tag mit jedem und schau, wie weit du kommst. Das gibt Ihnen einen ziemlich guten Hinweis darauf, welche Tools für die Aufgabe geeignet sind und sich für Sie am wohlsten fühlen.
Brian Flanagan

1
@ Brian Flanagan Bewegen Sie sich zu einer Antwort - auch wenn "Meta".

1
Haben Sie sich tiddlywiki.com angesehen , ich denke, das ist ein reines, in sich geschlossenes Wiki, das in JavaScript erstellt wurde
Bernhard

Ja, ich habe mir tiddlywiki angesehen. In vielerlei Hinsicht ist es die Inspiration für dieses Projekt, aber ich habe meine eigene Basis und Richtung für dieses Projekt ins Auge gefasst.
funkyeah

Antworten:


4

Ich würde vorschlagen, zuerst spezifische UI-Anforderungen für Ihr Projekt zu erstellen. Welches der Frameworks, die Sie ausprobiert haben, haben Sie für eine Spritztour genommen?

Persönlich bin ich in die ExtJS-Entwicklung eingestiegen, weil die Projekte, an denen ich arbeite, viele Anpassungen der Steuerelemente / Widgets erfordern. ExtJS hat eine Menge davon direkt nach dem Auspacken und kann jederzeit erweitert, kombiniert oder in die Monstrosität verwandelt werden, die Ihr Unternehmen benötigt.

Mit ExtJS 4 können Sie auch Ihre Benutzeroberflächen "häuten", um das Erscheinungsbild weiter anzupassen.

Wenn Sie mit JavaScript noch nicht vertraut sind und mit Java vertraut sind, sollten Sie sich sogar eine serverseitige Lösung wie GWT , JSF oder sogar Vaadin ansehen


19

Ich bin mir nicht sicher über Ihre Zeitachse und Ressourcen, aber wenn ich versuche, mich zwischen mehreren Frameworks / Umgebungen zu entscheiden, versuche ich einfach, schnell einen Prototyp zu erstellen. Selbst wenn es nur eine oder zwei Hauptfunktionen sind, finde ich, dass alle Recherchen und Dokumentationen der Welt niemals mit dem Versuch übereinstimmen werden, tatsächlich etwas mit den Werkzeugen zu bauen. Ich sage, nimm dir einen Tag mit jedem und schau, wie weit du kommst. Das gibt Ihnen einen ziemlich guten Hinweis darauf, welche Tools für die Aufgabe geeignet sind und sich für Sie am wohlsten fühlen.


6

ist heutzutage der letzte Schrei (das bekannteste Full-Stack-JavaScript-Framework auf GitHub und Meteorpedia ist eine in Meteor geschriebene Wiki-Engine.

Das Startvideo wird Sie um 1:28 begeistern.

Es ist in Bezug auf die Benutzeroberfläche agnostisch und wurde ausführlich mit Bootstrap und Famo.us getestet . Es generiert auch mobile Apps aus derselben Codebasis.


1
Und es gibt Integrationen mit React, aber das ist nur für Leute, die sich zu 100% dafür interessieren. Es gibt auch keine Probleme mit der Verwendung von JQuery-Plugins und SVG / Canvas-Zeichnungsbibliotheken ohne viel Wissen über Meteor.
Imslavko

1

Ihre Wahl des Frameworks schränkt Ihre UI-Auswahl möglicherweise nicht so stark ein, wie Sie es sich vorstellen. Dieser kürzlich erschienene Artikel von Henri Bergius über das Entkoppeln von Content Management veranschaulicht den Punkt viel besser als ich - und enthält übrigens Links zu einem ziemlich süß aussehenden In-Place-Content-Editor mit reinem JavaScript (Framework-unabhängig) .


Ich grabe auf jeden Fall den Aloha-Editor für WYSIWYG. Ich würde es definitiv am oberen Bildschirmrand andocken und Registerkarten hinzufügen, um den Textbereich auch in einem Markup eines bestimmten Formats anzuzeigen. Meine andere Hauptoption wäre ein Hauch von markItUp .
funkyeah

1

Du bist nicht allein!

VanillaJS und Ampersand .. sind großartige Beispiele für das ernsthafte Bestreben nach einfacherem, modularerem JavaScript.

Es gibt sogar ein Buch darüber.

Die Einfachheit wird durch eine unterbewertete es6-Funktion angetrieben: Module und den SystemJS- Implementierungsstandard. Es kann sogar auf Nicht-Es6-Systemen verwendet werden.

Wie cool ist das!


1

Ich würde sagen, dass Sie bei der Auswahl der Kandidaten insgesamt falsch liegen, da Sie Angular und Ember weglassen, die beide besser geeignet sind als alle anderen aufgeführten Frameworks.

Insgesamt würde ich sagen, dass Angular.js das Framework für dieses ist.

Schwerpunkt Routing

Vieles, worüber Sie sprechen (mehrere Seitenleisten für die Navigation, eine App für eine einzelne Seite), hängt vom Routing ab oder davon, wie das Front-End den Text in Ihrer URL-Navigationsleiste interpretiert.

Sowohl Angular.js als auch Ember verfügen über hervorragende Router, mit denen Sie alles, was Sie benötigen, ohne zusätzlichen Code ausführen können.

Zu Ihrem Vorteil finden Sie hier eine kurze Aufschlüsselung der Funktionen in Angular, mit denen Sie Ihr Wiki für einzelne Seiten erstellen können

Die Struktur der Site selbst

Angular verfügt über eine erstaunliche Bibliothek namens UI-Router, mit der Sie sowohl eine benutzerdefinierte Navigation erstellen als auch eine SEO-freundliche Struktur zum Anzeigen Ihrer Inhalte einrichten können. Mehrere Ansichten würden auch eine obere Symbolleiste ermöglichen.

Ui-Router-Tutorial: http://cacodaemon.de/index.php?id=57

WYSIWYG-Editor

Angular basiert auf einer Live-Zwei-Wege-Bindung (wenn Sie irgendwo etwas ändern, ändert es sich automatisch überall anders.) Daher enthält es viele Funktionen, die mit dieser Art von Editor gut funktionieren. Es wurden bereits einige gute erstellt, die Sie nur implementieren müssen.

http://textangular.com/

Grafiken und andere ordentliche Sachen

Winkelanweisungen dienen beispielsweise zum Erstellen wiederverwendbarer Diagrammkomponenten. Sie unterscheiden sich nicht vollständig von Wordpress-Widgets. Viele davon wurden bereits entwickelt und können in Ihr Angular-Projekt eingefügt werden.

http://www.sitepoint.com/creating-charting-directives-using-angularjs-d3-js/

In Bezug auf Ember weiß ich nicht viel darüber, daher kann ich nicht mit seinen Besonderheiten sprechen.


0

Ein Vorschlag zu Backbone: Wenn Sie sich für die Verwendung von Backbone entscheiden, sollten Sie sich für Marionnete entscheiden, da es Backbone ist, aber eine bessere architektonische Struktur und eine bessere Meinung hat (ich persönlich bin der Meinung, dass Backbone keine Richtlinien festlegt, und das fühlt sich bei großen Apps wie ein Nachteil an). .

Ich habe ein paar Monate damit gearbeitet, indem ich verschiedene js-Bibliotheken kombiniert habe und mich nicht wie andere Frameworks in den Weg gestellt habe. Die Nachrichten-Pipeline ist eine wirklich gute Möglichkeit, Komponenten über die App zu verbinden, aber sie zu entkoppeln.

Hier hast du ein großartiges Gespräch, das mich dazu gebracht hat, mich dafür zu entscheiden: https://www.youtube.com/watch?v=qWr7x9wk6_c

Und hier haben Sie einen Demo-Prototyp, der auch das Drag & Drop-Element sowie andere verbundene js-Bibliotheken enthält. Würde gerne hören, was Sie über meinen Code denken, da ich 1,5 Jahre an der Webentwicklung gearbeitet habe ... Ich bin immer noch ein Neuling: https://github.com/Drasky-Vanderhoff/marionette-demo/

Über Knockout ist es wirklich gut, wenn Sie mit den bereits vorhandenen Inhalten interagieren möchten und sich nicht ständig mit dem Backend verbinden. Ich habe 6 Monate damit gearbeitet und muss am Ende viele andere js libs für das Routing verwenden. Außerdem wiederhole ich am Ende viele der Strukturen, die Backbone und andere JS Frameworks haben. Was ich sagen werde ist, dass es dir überhaupt nicht in die Quere kommt und eher ein Werkzeug als eine Einschränkung ist. Auch das war vor fast einem Jahr, also haben sich einige Dinge geändert.

Eine Sache, wenn Sie Knockback (Knockout + Backbone) finden ... vermeiden Sie es, die Dokumentation ist nicht so gut wie sie sein sollte und Sie werden viel mehr Zeit brauchen, um es zu lernen. Wenn Sie es versuchen möchten, machen Sie zuerst einen schnellen Prototyp, um zu sehen, ob es das ist, was Sie wollen.


Es ist ein Jahr her, seit du das gepostet hast. Ist Marionette immer noch Ihre erste Wahl für die Javascript-Entwicklung, da ich jetzt mit der Neuentwicklung beginnen möchte?
AlVaz

Überhaupt nicht, im Moment ist es besser, Angular.js oder React.js zu verwenden (Sie können beide kombinieren, wenn Sie möchten). Wenn Sie sowohl eine mobile als auch eine Webversion für eine App verwenden möchten, empfehle ich Ihnen dringend, React.js zu verwenden, da React Native zum Erstellen von nativen iOS- und Android-Apps verwendet wird. Sowohl React.js als auch native teilen die gleichen Konzepte, Strukturen und Paradigmen (ist Einmal lernen, überall verwenden, React.js kennen == React Native, ja, ich verwende kein Triple Equals: P)
DraskyVanderhoff

Es gibt auch Webkomponenten, die Polymer verwenden. Ich empfehle Ihnen dringend, dies zu überprüfen, wenn Sie mit dem wahrscheinlich heißesten Framework im nächsten Jahr arbeiten möchten. Schließlich ist Meteor eine großartige Option, wenn Sie eine 100% ige Echtzeit-Datensynchronisierung / Drei-Wege-Datenbindung benötigen, insbesondere weil beim Schreiben von Validatoren für Parameter derselbe Validator sowohl im Backend als auch im Frontend ausgeführt wird. Vermeiden Sie die Notwendigkeit von 2 Codes Basen, die gleich sind.
DraskyVanderhoff

Eine Klarstellung, ich habe nie gesagt, dass Marionette meine erste Wahl war (es war zu diesem Zeitpunkt tatsächlich Angular). Ich hatte gesagt, WENN Sie Backbone.js verwenden, verwenden SIE stattdessen Marionette.js.
DraskyVanderhoff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.