Im vorherigen Teil haben wir die Grundlagen unserer Erweiterung erstellt und die Authentifizierung über einen benutzerdefinierten Einstellungsbildschirm von Foundation betrieben und die JavaScript-Clientbibliothek von Trello verwendet. In diesem Teil werden wir unsere Erweiterung beenden, indem wir die Exportlogik und die Benutzeroberfläche hinzufügen.
Wenn wir uns mit Trello auf dem Einstellungsbildschirm authentifizieren, wird das Trello -Token im lokalen Speicher gespeichert. Die Einstellungsseite ist jedoch eine eigene Seite und effektiv ihre eigene Umgebung - Ergo haben weder die Hintergrundseite der Erweiterung noch die Inhaltskripte der Erweiterung zugreifen. Hier müssen wir eine Nachrichtenübergabe verwenden.
Die API von chrome.extesion.sendMessage wird verwendet, um Nachrichten an und von Hintergrundseiten zu senden. In unserem Fall werden wir es verwenden, um das Token von der Einstellungsseite an unsere Hintergrundseite zu senden. Da unser Einstellungsabenteuer abgeschlossen ist, sobald dies abgeschlossen ist, können wir die Registerkarte automatisch schließen, um die Benutzerfreundlichkeit zu verbessern.
Aktualisieren Sie den ersten Teil der Init -Funktion in Einstellungen.js:
<span>// Check if page load is a redirect back from the auth procedure </span> <span>if (HashSearch.keyExists('token')) { </span> <span>Trello.authorize( </span> <span>{ </span> <span>name: "Trello Helper Extension", </span> <span>expiration: "never", </span> <span>interactive: false, </span> <span>scope: {read: true, write: false}, </span> <span>success: function () { </span> chrome<span>.extension.sendMessage({ </span> <span>command: 'saveToken', </span> <span>token: localStorage.getItem('trello_token') </span> <span>}, function(data) { </span> chrome<span>.tabs.getCurrent(function (tab) { </span> chrome<span>.tabs.remove(tab.id) </span> <span>}); </span> <span>}); </span> <span>}, </span> <span>error: function () { </span> <span>alert("Failed to authorize with Trello.") </span> <span>} </span> <span>}); </span> <span>}</span>
Mit dieser Logik sagen wir die Trello -Bibliothek, dass sie eine Nachricht an die Erweiterung senden soll, wenn die Authentifizierung abgeschlossen ist, und sobald sie eine Rückgabenachricht erhält, in der die Nachricht empfangen wurde (das ist der Teil (Daten)), schließen wir die Aktuelle Registerkarte
Lassen Sie uns nun mit der Hintergrundseite umgehen. Ändern Sie zunächst den Inhalt des Hintergrunds.html auf diese:
<span><span><!doctype html></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/key.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/background.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/trello_client.js"</span>></span><span><span></script</span>></span></span>
Wir laden den App -Schlüssel, das Hintergrundskript, das wir für unsere Logik verwenden, und den Trello -Client wie zuvor. Offensichtlich brauchen wir auch JQuery - es ist Trellos Abhängigkeit.
Ändern Sie dann Skripte/Hintergrund.js in:
chrome<span>.extension.onMessage.addListener( </span> <span>function (request<span>, sender, sendResponse</span>) { </span> chrome<span>.pageAction.show(sender.tab.id); </span> <span>// Now we have a token saved locally, as fetched from the settings page after authorization. </span> <span>if (request.command == 'saveToken') { </span> <span>localStorage.setItem('trello_token', request.token); </span> <span>sendResponse(); </span> <span>return true; </span> <span>} </span> <span>});</span>
Dies ist der Teil, der die Nachricht von der Seite "Einstellungen" empfängt. Es greift das Token aus der Anfrage heraus und spart es für zukünftige Verwendung in LocalStorage. Wir verwenden die Objektbildung mit dem Befehl als Hauptschlüssel, da wir später andere Befehle in die Hintergrundseite senden möchten.
Über dem Befehl Savetoken, lass uns einen anderen Block:
<span>// Check if page load is a redirect back from the auth procedure </span> <span>if (HashSearch.keyExists('token')) { </span> <span>Trello.authorize( </span> <span>{ </span> <span>name: "Trello Helper Extension", </span> <span>expiration: "never", </span> <span>interactive: false, </span> <span>scope: {read: true, write: false}, </span> <span>success: function () { </span> chrome<span>.extension.sendMessage({ </span> <span>command: 'saveToken', </span> <span>token: localStorage.getItem('trello_token') </span> <span>}, function(data) { </span> chrome<span>.tabs.getCurrent(function (tab) { </span> chrome<span>.tabs.remove(tab.id) </span> <span>}); </span> <span>}); </span> <span>}, </span> <span>error: function () { </span> <span>alert("Failed to authorize with Trello.") </span> <span>} </span> <span>}); </span> <span>}</span>
Wenn wir keinen bestimmten Befehl ausgeben und unser Benutzer noch nicht mit Trello authentifiziert ist, öffnen Sie die Einstellungsseite in einer neuen Registerkarte. Dies stellt sicher, dass die Einstellungsseite unmittelbar nach der ersten Installation der Erweiterung geöffnet wird, sobald eine Trello -Karte im Browser besucht wird.
Trellos Benutzeroberfläche ist sehr, sehr unfreundlich für die Anpassung. Die Listen haben keine IDs in ihren Elementen, entweder als Datenattribute oder Links jeglicher Art, während Karten dies tun. Die Kontextmenüs, die beim Klicken auf die Schaltfläche Listenoptionen in der oberen rechten Ecke hervorgebracht werden. Aufgerufen, wenn Sie in der Benutzeroberfläche auf so ziemlich auf jedes andere Menü klicken. Was noch schlimmer ist, sobald Sie das Popover -Menü einer Liste anrufen, enthält das Menü selbst keine Kennung der Liste, die sie aufgerufen wurde. Trello API darüber und holen Sie die Karten für den Export. Aus diesem Grund scheint das, was folgt
Um dem Kontextmenü eine Menüoption hinzuzufügen, müssen wir das Inhaltskript von Main.js bearbeiten. Drehen Sie es in dies:
<span><span><!doctype html></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/key.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/background.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/trello_client.js"</span>></span><span><span></script</span>></span></span>
Finden Sie die List -ID
Zum Glück können wir, wenn wir die Karten in einzelnen Listen inspizieren, sehen, dass diese tatsächlich ein HREF -Attribut haben und dass es die Karten -ID enthält. Indem wir die Karten -ID kennen, können wir Trello für seine Informationen abfragen und die ID der übergeordneten Liste erfassen. Aber ... wenn das Popover -Menü nicht an eine Liste beigefügt ist, wie finden wir dann heraus, auf welche Liste wir geklickt haben? Wir können nicht einfach die erste Karte schnappen, auf die wir stoßen, das wäre zu zufällig.
Wir können das von JQuery abgefeuerte Ereignis verwenden, wenn die Menüschaltfläche klickt. Das ist wichtig! Wir verwenden das Original -Klicken auf die Menüschaltfläche anstelle des Klickens auf die Option "Exportieren", da die ursprüngliche Schaltfläche an die Liste gebunden ist, an der wir den Exportieren haben, das tatsächliche Menü, das spricht wird, ist nicht und als solche. macht es uns fast unmöglich, herauszufinden, mit welcher Liste wir uns befassen. Fügen Sie anstelle des Kommentars der // Exportliste im obigen Code Folgendes hinzu:
<span>// Check if page load is a redirect back from the auth procedure </span> <span>if (HashSearch.keyExists('token')) { </span> <span>Trello.authorize( </span> <span>{ </span> <span>name: "Trello Helper Extension", </span> <span>expiration: "never", </span> <span>interactive: false, </span> <span>scope: {read: true, write: false}, </span> <span>success: function () { </span> chrome<span>.extension.sendMessage({ </span> <span>command: 'saveToken', </span> <span>token: localStorage.getItem('trello_token') </span> <span>}, function(data) { </span> chrome<span>.tabs.getCurrent(function (tab) { </span> chrome<span>.tabs.remove(tab.id) </span> <span>}); </span> <span>}); </span> <span>}, </span> <span>error: function () { </span> <span>alert("Failed to authorize with Trello.") </span> <span>} </span> <span>}); </span> <span>}</span>
Erstellen Sie dann die Funktion:
<span><span><!doctype html></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/key.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/background.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/trello_client.js"</span>></span><span><span></script</span>></span></span>
Erstellen Sie schließlich die FindFirstCardid -Funktion:
chrome<span>.extension.onMessage.addListener( </span> <span>function (request<span>, sender, sendResponse</span>) { </span> chrome<span>.pageAction.show(sender.tab.id); </span> <span>// Now we have a token saved locally, as fetched from the settings page after authorization. </span> <span>if (request.command == 'saveToken') { </span> <span>localStorage.setItem('trello_token', request.token); </span> <span>sendResponse(); </span> <span>return true; </span> <span>} </span> <span>});</span>
Wir holen den Großelternteil des Ereignisziels (die Liste) und finden den ersten Kartentitel darin. Der Titel enthält die HREF in dieser Form:
Wenn kein Titel gefunden wurde, alarmieren wir den Benutzer darüber, dass die Liste nicht exportiert werden kann. Andernfalls extrahieren wir und geben die ID der Karte zurück.
Jetzt, da unsere Exportlist -Funktion die Karten -ID hat, können wir sie verwenden, um die Listen -ID herauszufinden. Wenn wir uns die API -Dokumente ansehen, können wir die URL -Karte/{{id}} verwenden, um das zu erhalten, was wir brauchen. Um die Datenmenge zu minimieren, die wir Trello zurückgeben, können wir die Abfrage auch auf die IDLILT -Eigenschaft mit dem Fields -Param beschränken. Fügen wir einen neuen Befehl in den Hintergrund hinzu.js.
<span>if (!request.command && !localStorage.getItem('trello_token')) { </span> chrome<span>.tabs.create({url: chrome.extension.getURL('settings/index.html')}); </span> <span>sendResponse(); </span> <span>return true; </span> <span>}</span>
Wir müssen auch die Trelloinit -Funktion definieren. Dies ist eine, die wir jedes Mal anrufen können, bevor ein Befehl mit Trello aufgerufen wird, sodass das Token und der Schlüssel korrekt eingestellt sind und wir zu 100% sicher sind, dass unsere Anfragen authentifiziert sind.
chrome<span>.extension.sendMessage({}, function (response) { </span> <span>var readyStateCheckInterval = setInterval(function () { </span> <span>if (document.readyState === "complete") { </span> <span>clearInterval(readyStateCheckInterval); </span> <span>var popover = $(".pop-over"); </span> <span>$('.list-header-menu-icon').click(function(event) { </span> <span>var popover_summoned_interval = setInterval(function () { </span> <span>if ($(popover).is(':visible')) { </span> <span>clearInterval(popover_summoned_interval); </span> <span>$(".pop-over .content").append('<hr><ul > <li><a href="#">Export This List</a></li> </ul>'); </span> <span>$(".js-export-list").click(function(e){ </span> <span>// EXPORT LIST </span> <span>}); </span> <span>} </span> <span>}, 50); </span> <span>}); </span> <span>} </span> <span>}, 10); </span><span>});</span>
Wir holen jetzt erfolgreich die List -ID.
Mit ein paar weiteren Codezeilen, zurück in main.js, haben wir jetzt eine Exportlist -Funktion wie folgt:
<span>exportList(event);</span>
In „Humanese“ ist dies:
<span>function exportList(event) { </span> <span>var first_card_id = findFirstCardId(event); </span> <span>if (!first_card_id) { </span> <span>alert('No cards found in the list.'); </span> <span>return false; </span> <span>} </span><span>}</span>
Exportformate
<span>/** </span><span> * Uses the menu button on a card to find the first card in that list and get its ID </span><span> * Returns false if not found, or the ID if there is a card </span><span> * <span>@param event </span></span><span> * <span>@returns bool | string </span></span><span> */ </span><span>function findFirstCardId(event) { </span> <span>var titles = $(event.currentTarget).parent().parent().find('a.list-card-title:first'); </span> <span>if (titles[0] === undefined) { </span> <span>console.error('List has no cards!'); </span> <span>return false; </span> <span>} else { </span> <span>return $(titles[0]).attr('href').split('/')[2]; </span> <span>} </span><span>}</span>
Die JSON -Daten werden offensichtlich viel mehr Informationen liefern, aber es ist auch viel einfacher zu bearbeiten - fügen Sie sie einfach in eine IDE oder ein Tool wie JSON -Editor Online oder JSON an CSV ein, und Sie können loslegen.
Um zu exportieren, benötigen wir ein modales Fenster, in dem die Daten eingefügt werden können. Eine ansprechende Option hier ist das Foundation -Framework, da wir sie bereits für unsere Einstellungsseite verwenden und über eine eigene modale Popup -Komponente verfügen, aber weder die CSS von Foundation noch Trellos CSS sind ordnungsgemäß genannt und einschließlich der CSS von Foundation in Trellos Ursachenkonflikte. Wir haben auch JQuery vorgeklagt, aber auch hier, um einen Dialog zum Laufen zu erhalten, müssten wir die JQuery-UI einbeziehen, und selbst das wäre nicht genug-Chromverlängerungen unterstützen nicht das Laden von Bildern in CSS über relative URL ( . Ansätze.
Stattdessen werden wir unser eigenes Popup erstellen und einige der vorhandenen Stile von Trello verwenden, um alle Konflikte auf dem Weg zu ignorieren. Ich werde den endgültigen Code hier einsetzen und ihn dann erklären. Bitte erstellen Sie lib/trellohelper/js/exportpopup.js und geben Sie ihm den folgenden Inhalt:
<span>// Check if page load is a redirect back from the auth procedure </span> <span>if (HashSearch.keyExists('token')) { </span> <span>Trello.authorize( </span> <span>{ </span> <span>name: "Trello Helper Extension", </span> <span>expiration: "never", </span> <span>interactive: false, </span> <span>scope: {read: true, write: false}, </span> <span>success: function () { </span> chrome<span>.extension.sendMessage({ </span> <span>command: 'saveToken', </span> <span>token: localStorage.getItem('trello_token') </span> <span>}, function(data) { </span> chrome<span>.tabs.getCurrent(function (tab) { </span> chrome<span>.tabs.remove(tab.id) </span> <span>}); </span> <span>}); </span> <span>}, </span> <span>error: function () { </span> <span>alert("Failed to authorize with Trello.") </span> <span>} </span> <span>}); </span> <span>}</span>
Ich habe mich für die Popup -Logik außerhalb des Hauptskripts entschieden, damit wir sie später leicht verbessern können. Ich habe mich auch für einen „objektorientierten“ Ansatz entschieden, nur weil es mir gefällt. Wir definieren eine neue Trelloexportpopup -Klasse mit drei Methoden - Init, Show und Fell. Init wird aufgerufen, sobald die Inhaltskripte geladen werden. Es ist die Methode, die für den Aufbau des Popups, das Anbringen der richtigen Ereignishörer und das Aufnehmen des Ganzen in das HTML des Trello -Boards zuständig ist. Das Hinzufügen der .button -Klasse zu den Tasten im Header des Popups stellt sicher, dass wir einen Look erhalten, der mit der aktuellen Trello -Benutzeroberfläche übereinstimmt. Der Look, den ich hier entscheide, ist eine Art "Registerkarte" -Rinschnittstelle - klicken Sie auf Text und der Text Export zeigt, klicken Sie auf JSON und JSON werden angezeigt.
Die Versteckmethode wird das Popup ausblenden, jedoch nur, wenn sie irgendwo in einer sichtbaren Form irgendwo auf der Seite existiert. Die Messmethode aktiviert automatisch die erste Registerkarte (JSON) und fülle die Exportbereiche mit den erforderlichen Daten. Der JSON -Bereich ist ein einfacher Stringify -Dump - eine Ausgabe der JSON -Daten in Zeichenfolgenform, während der Textbereich vorerst lediglich den Titel und die Beschreibung der Karte auf einer separaten Zeile mit zwei leeren Zeilen zwischen Karten ausgibt - hoch - hoch "Kopienfreundlich".
Alles, was wir jetzt tun müssen, ist es ein wenig zu stylen. Hier ist der Inhalt von lib/trellohelper/css/exportpopup.css:
<span><span><!doctype html></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/key.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/background.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/trello_client.js"</span>></span><span><span></script</span>></span></span>
Dies stellt sicher, dass das Popup zentriert ist und wie ein native Trello -Popups aussieht. Es stellt auch sicher, dass der Textbereich, der uns zeigt, dass der Exportinhalt den Rest des Popup -Raums füllt. Nehmen wir nun diese Dateien in unsere Inhaltskripte ein:
<span>// Check if page load is a redirect back from the auth procedure </span> <span>if (HashSearch.keyExists('token')) { </span> <span>Trello.authorize( </span> <span>{ </span> <span>name: "Trello Helper Extension", </span> <span>expiration: "never", </span> <span>interactive: false, </span> <span>scope: {read: true, write: false}, </span> <span>success: function () { </span> chrome<span>.extension.sendMessage({ </span> <span>command: 'saveToken', </span> <span>token: localStorage.getItem('trello_token') </span> <span>}, function(data) { </span> chrome<span>.tabs.getCurrent(function (tab) { </span> chrome<span>.tabs.remove(tab.id) </span> <span>}); </span> <span>}); </span> <span>}, </span> <span>error: function () { </span> <span>alert("Failed to authorize with Trello.") </span> <span>} </span> <span>}); </span> <span>}</span>
Lassen Sie uns schließlich Main.js mit der neuen Popup -Logik aufpeppen. Die endgültige Version von main.js sieht folgendermaßen aus:
<span><span><!doctype html></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/key.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="scripts/background.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/jquery-2.1.1.min.js"</span>></span><span><span></script</span>></span> </span><span><span><span><script</span> type<span>="text/javascript"</span> src<span>="lib/trello_client.js"</span>></span><span><span></script</span>></span></span>
Wir „instanziieren“ das TrelloExportPopup zuerst, sodass wir seine Methoden in unserem Code verwenden können. Bevor wir den Click -Event -Listener an das Menü binden, initialisieren wir unser Popup mit tep.init (), damit er in unserem DOM gut und bereit ist, bevor es benötigt wird. Nachdem der Exportlink geklickt wurde, rufen wir unsere Exportlist -Funktion wie zuvor auf.
In der Exportlist -Funktion verbergen wir zuerst das Popup mit tep.hide (), falls einer offen ist, während wir das Menü einer anderen Liste durchsuchen, und dann zeigen wir die Karten von unserer Hintergrundseite Das Exportpopup mit Tep.Show (Daten). Das ist es!
laden Sie die Erweiterung jetzt neu, aktualisieren Sie die Trello -Seite und Sie sollten eine funktionierende Exportoption haben!
Ich habe ein paar Fehler und Vorbehalte absichtlich hinterlassen. Wenn es genügend Interesse gibt, werden wir uns mit denen in einem zukünftigen Beitrag befassen, um die Erweiterung für die Fail-Safety zu optimieren und zu optimieren. Hier sind einige Verbesserungen, die noch möglich sind:
Um die Dinge für zukünftige Verwendungen zu beschleunigen, können wir Lokalstorage verwenden, um sich daran zu erinnern, zu welchem Board eine Liste gehört. Beachten Sie, dass dies möglicherweise brechen kann, wenn Sie eine Liste von Board in Board verschieben. Implementieren Sie diese Funktion sorgfältig. Stellen Sie sicher, dass Sie einen weiteren Hörer für Listenbewegungen hinzufügen, damit Sie die zwischengespeicherten Daten ungültig machen können!
Wenn Sie auf das Menüsymbol männlich klicken, während das Menü noch geöffnet ist, fügen Sie unten im Menü immer wieder neue Optionen "Exportieren" hinzu. Ein fehlender Sicherheitssicherheit muss implementiert werden, welche Überprüfungen, wenn die Option bereits vorhanden ist.
In riesigen Vorständen mit Hunderten von Boards und Mitgliedern wird die Benutzeroberfläche von Trello miserabel langsam. Dies führt zu einer Fehlzündung des Dokument -Ereignisses, und der Init -Teil unseres Skripts wird ausgeführt, bevor es UI -Elemente gibt, auf denen die Zuhörer binden. Daher hat das Menü manchmal die Exportoption und erhält sie erst, wenn Sie aktualisiert werden.
Wechselbretter tötet die aktuelle Benutzeroberfläche und baut sie für das neue Vorstand um. Das Problem ist jedoch, dass die Elemente mit den Ereignishörern ebenfalls getötet werden - sodass unser Menü die Exportoption nicht mehr beschwört. Ähnlich wie beim obigen Problem muss eine Reinitialisierung an Bordveränderung ausgelöst werden, damit alles funktioniert.
Es besteht eine astronomisch kleine Chance, dass ein Popover nach einem Menüklick nicht rendert - vielleicht hat Trello etwas in seiner Benutzeroberfläche geändert, vielleicht haben sie die Klasse geändert oder sie haben nur einen UI -Fehler - in welchem Fall der Fall der Fall Die Überprüfung der Schleife auf seine Sichtbarkeit würde unendlich werden und enorme Mengen an CPU -Ressourcen in Anspruch nehmen, bis der Registerkartenprozess getötet wurde. Ein Schutz gegen das wäre schön.
In dieser kurzen Serie haben wir eine einfache Chrome -Erweiterung für Trello erstellt, mit der wir die Karten aus einer bestimmten Liste als JSON- oder TXT -Liste exportieren können. Verwenden Sie dieses Beispiel, um darauf aufzubauen und Ihre eigenen Trello -Erweiterungen zu erstellen. Die Authentifizierung wurde bereits für Sie gelöst, und die Logikvorlagen sind vorhanden - beginnen Sie mit dem Codieren!
Der Code, den wir in dieser Tutorial -Serie geschrieben haben, ist auf GitHub verfügbar.
Möchten Sie eine Fortsetzung dieses Tutorials sehen? Weitere Funktionen implementiert? Lass es mich wissen! Feedback geschätzt!
Kann ich Trello -Listen in ein Bild exportieren? Dies kann mit der Chromverlängerung „Export für Trello“ erfolgen. Navigieren Sie nach der Installation der Erweiterung zu Ihrer Trello -Karte, klicken Sie auf das Erweiterungssymbol und wählen Sie das Bildformat zum Exportieren. Ihre Trello -Listen werden als Bilddatei heruntergeladen.
Kann ich Trello -Listen mit Kommentaren exportieren? Die Chrome -Erweiterung von Trello unterstützt keine Exportents ". Alle anderen Details Ihrer Trello -Listen, einschließlich Kartennamen, Beschreibungen, Beschriftungen und Fälligkeitstermine, können jedoch exportiert werden. Mit der Chrome -Erweiterung von Trello können Sie die Trello -Listen gleichzeitig aus einem Board exportieren. Wenn Sie Listen aus mehreren Boards exportieren möchten, müssen Sie zu jeder Karte navigieren und die Listen separat exportieren.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine Trello -Chrome -Erweiterung - Exportlisten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!