翻譯|使用教程|編輯:楊鵬連|2021-01-04 10:02:45.290|閱讀 316 次
概述:在此博客文章中,我們將演示如何設(shè)置Unix / Linux系統(tǒng)以在Electron.js下運行示例JavaScript圖應(yīng)用程序。我們使用一臺運行Raspberry Pi OS的Raspberry Pi計算機,Raspberry Pi OS是為Raspberry Pi硬件而優(yōu)化的基于Debian的OS。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
MindFusion.Diagramming for WinForms是一個能幫助你創(chuàng)建工作流和進程圖表的.NET控件;數(shù)據(jù)庫實體關(guān)系圖表;組織圖表;對象層次和關(guān)系圖表;圖表和樹。它是基于對象-圖表框,表格和箭頭類型,將其歸類分派給其他并結(jié)合成復雜的結(jié)構(gòu)。該控件提供超過預先定義的50多種圖表框,如自定義設(shè)計樣式和對圖表框著色等。MindFusion.Diagramming for WinForms現(xiàn)已加入在線訂購,Standard Single Developer版本原價2848現(xiàn)在年終鉅惠搶購立享優(yōu)惠只需2345,立即查看詳情>>
點擊下載MindFusion.Diagramming for WinForms最新試用版
在此博客文章中,我們將演示如何設(shè)置Unix / Linux系統(tǒng)以在Electron.js下運行示例JavaScript圖應(yīng)用程序。我們使用一臺運行Raspberry Pi OS的Raspberry Pi計算機,Raspberry Pi OS是為Raspberry Pi硬件而優(yōu)化的基于Debian的OS。
這是我們的測試應(yīng)用程序的外觀:
 
	1.安裝NPM和Node.js
	我們想要干凈安裝Node.js和npm,這就是為什么我們刪除所有以前的版本和安裝的原因,如果有的話:
sudo apt-get remove nodejs sudo apt-get remove npm卸載npm和Node.js后,我們將刪除npm和node_modules文件夾的內(nèi)容。
sudo rm -rf ~/.npm sudo rm -rf /usr/local/lib/node_modules然后,我們通過直接從npmjs網(wǎng)站運行安裝腳本來安裝npm和node.js:
curl -0 -L //npmjs.org/install.sh | sudo sh我們可以通過查詢系統(tǒng)當前的npm和node.js版本來檢查安裝是否成功:
npm -v node -v如果您已卸載npm來重新安裝它,則可能會出現(xiàn)以下錯誤:
	
-bash: /usr/bin/npm: No such file or directory
常見的情況是新的npm安裝在新位置,并且bash已緩存路徑。跑
	
hash -r
刪除所有以前存儲的映射。
在開始安裝electron之前,請確保當前用戶具有對node_modules目錄的寫權(quán)限。我們檢查誰是目錄的所有者:
	
ls -la / usr / local / lib / node_modules
在我們的例子中,結(jié)果是:
	
drwxr-xr-x 3 root root 4096 Nov 30 12:48 .
drwxr-xr-x 6 root   root 4096 Nov 30 12:29 ..
drwxr-xr-x 9 root root 4096 Nov 30 12:29 npm
這意味著node_modules目錄的讀取權(quán)限歸root(不是當前用戶)所有。即使使用“ sudo”運行npm install命令,您仍可能會收到以下類型的訪問沖突錯誤:
Error: EACCES: permission denied, mkdtemp '/usr/local/lib/node_modules/electron/electron-download-4LQBL9'
您可以通過授予當前用戶權(quán)限來解決此問題:
	
sudo chown -R pi: /usr/local/lib/node_modules
在我們的情況下,該用戶稱為“ pi” –您需要在此處指定用戶名。現(xiàn)在,該目錄的查詢返回:
	
pi@raspberrypi:~ $ ls -la /usr/local/lib/node_modules
total 12
drwxr-xr-x 3 pi pi   4096 Nov 30 12:48 .
drwxr-xr-x 6 pi root 4096 Nov 30 12:29 ..
drwxr-xr-x 9 pi pi   4096 Nov 30 12:29 npm
現(xiàn)在我們準備安裝Electron.js。我們通過以下方式在全球范圍內(nèi)安裝它:
	
npm install electron -g
并且我們已經(jīng)設(shè)置了系統(tǒng)來運行Node.js和Electron.js。
二.圖表設(shè)置
	我們使用Electron快速入門指南中的默認模板準備一個空白頁。在網(wǎng)頁的主體中,我們創(chuàng)建一個Canvas,該Canvas將被該圖使用:
<div> <canvas id =“ diagram”> </ canvas> </ div>然后,我們添加對圖腳本的引用:
<script src =“ MindFusion.Common.js”> </ script> <script src =“ MindFusion.Diagramming.js”> </ script>我們已將這些腳本放置在與網(wǎng)頁相同的目錄中。然后,我們開始一個新的腳本部分,在其中創(chuàng)建圖:
	
<script>
   //創(chuàng)建圖
   var Diagram = MindFusion.Diagramming.Diagram;
    //創(chuàng)建圖對象
    const canvas = document.getElementById(“ diagram”);
    const diagram = Diagram.create(canvas);
    diagram.setUndoEnabled(true);
    diagram.setAllowInplaceEdit(true);
</ script>
我們首先創(chuàng)建一個映射到MindFusion.Diagramming.Diagram類的名稱空間。然后,我們獲得放置在網(wǎng)頁中的HTML Canvas。我們使用ID進行識別。我們使用create靜態(tài)方法創(chuàng)建Diagram對象,該方法將Canvas作為參數(shù)。然后,我們?yōu)樾聞?chuàng)建的圖啟用撤消和就地編輯。
	讓我們創(chuàng)建一個呈現(xiàn)一些文本的示例節(jié)點。我們這樣做:
//創(chuàng)建一個樣本節(jié)點 const node = diagram.getFactory()。createShapeNode(10,10,40,30); node.setText(“ Hello world!”);現(xiàn)在,如果您使用
npm start從項目文件所在的目錄中,您將能夠看到帶有節(jié)點的頁面。
三.替換默認的Electron.js菜單
我們要用對圖表項目執(zhí)行的操作替換默認的電子菜單“復制”,“剪切”,“粘貼”,“撤消”和“重做”。Diagram API支持相同的命令,我們希望它們執(zhí)行而不是Electron.js提供的命令。
	我們打開電子項目模板的index.js文件并獲得菜單:
const {Menu} = require('electron');
const menu = Menu.getApplicationMenu();
現(xiàn)在,我們訪問此菜單中的每個項目,并通過onclick使它們發(fā)送其角色,例如其行為:
	
for (let item of menu.items)
  {
if (item.submenu)
{
  {
    for (let subitem of item.submenu.items)
{
  switch (subitem.role)
  {
case "undo":
case "redo":
case "cut":
case "copy":
case "paste":
  subitem.click =
    () => win.webContents.send(subitem.role);
  break;
  }
}
  }
}
  }
我們編輯Electron.js模板的index.html和index.js文件以制作示例圖:
 
	然后,我們通過觸發(fā)相應(yīng)的圖表方法來處理click事件。我們使用ipcRenderer常量獲取事件:
const {ipcRenderer} = require('electron');
ipcRenderer是Electron的用于發(fā)出事件的模塊。我們使用它來了解菜單按鈕上的click事件何時發(fā)生并處理點擊:
ipcRenderer.on("undo", () => diagram.undo());
ipcRenderer.on("redo", () => diagram.redo());
ipcRenderer.on("cut", () => diagram.cutToClipboard());
ipcRenderer.on("copy", () => diagram.copyToClipboard());
ipcRenderer.on("paste", () => diagram.pasteFromClipboard(10, 10, false, false));
這意味著,當用戶單擊內(nèi)置菜單項時,該動作將被那些圖表方法代替。
	這就是我們教程的結(jié)尾。從以下位置下載示例項目:https : 
//mindfusion.eu/_samples/FirstApp.zip
有關(guān)技術(shù)問題,請使用JS Diagram論壇:https : //mindfusion.eu/Forum/YaBB.pl?board=jsdiag_disc
關(guān)于JavaScript繪圖:此本地JavaScript庫為開發(fā)人員提供了創(chuàng)建和自定義任何類型的圖,決策樹,流程圖,類層次結(jié)構(gòu),圖,家譜樹,BPMN圖等的能力。該控件提供了豐富的事件集,眾多的自定義選項,動畫,圖形操作,樣式和主題。您有100多個預定義節(jié)點,表節(jié)點和15多種自動布局算法。在//mindfusion.eu/javascript-diagram.html上了解有關(guān)JavaScript制圖的更多信息。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自: