翻譯|使用教程|編輯:吳園園|2020-05-19 11:14:02.990|閱讀 439 次
概述:許多應(yīng)用程序?qū)⒁蟪绦騿T在頁面的同一內(nèi)容區(qū)域上顯示不同的圖。本文將為您介紹如何替換圖和模型。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
GoJS是一款功能強(qiáng)大,快速且輕量級的流程圖控件,可幫助你在JavaScript 和HTML5 Canvas程序中創(chuàng)建流程圖,且極大地簡化您的JavaScript / Canvas 程序。
許多應(yīng)用程序?qū)⒁蟪绦騿T在頁面的同一內(nèi)容區(qū)域上顯示不同的圖。這在單頁Web應(yīng)用程序中尤其常見。通常,您不需要刪除該圖并創(chuàng)建另一個圖即可。由于圖很是類似一個視圖中的模型-視圖架構(gòu),可以代替更換Diagram.model,也許還有其他設(shè)置,如Diagram.nodeTemplateMap或Diagram.layout。或者,您可以構(gòu)建更大的模板圖,以適應(yīng)您希望呈現(xiàn)的所有模型。
下面是保留單個圖表用作視圖表面的示例。它加載了一個Model,一個按鈕將加載一個使用不同模板的不同Model,并設(shè)置一個不同的Layout。這說明了圖的重用,它比處理多個圖通常更容易,更有效。這是一次最多顯示一張圖表的正常方法。
// A minimal Diagram diagram.nodeTemplate = $(go.Node, "Auto", $(go.Shape, "RoundedRectangle", new go.Binding("fill", "color")), $(go.TextBlock, { margin: 3, font: '28px sans-serif' }, // some room around the text new go.Binding("text", "key")) ); // Node template that is only used by the second model diagram.nodeTemplateMap.add("TypeTwo", $(go.Node, "Horizontal", $(go.Shape, "Circle", { width: 24, height: 24, strokeWidth: 0, portId: "" }, new go.Binding("fill", "color")), $(go.TextBlock, { margin: 2, font: "Bold 15px sans-serif" }, new go.Binding("text", "key")) ) ); // Another node template that is only used by the second model diagram.nodeTemplateMap.add("AnotherType", $(go.Node, "Auto", $(go.Shape, "Rectangle", { strokeWidth: 1, fill: 'lightyellow' }, new go.Binding("fill", "color")), $(go.TextBlock, { margin: 12, font: "12px sans-serif" }, new go.Binding("text", "text")) ) ); var firstModel = true; loadModel(); // Toggle the Diagram's Model var button1 = document.getElementById('button1'); button1.addEventListener('click', function() { loadModel(); }); function loadModel() { if (firstModel) { // load the first model diagram.layout = new go.Layout(); // Simple layout diagram.model = new go.GraphLinksModel( [ { key: "Alpha", color: "lightblue" }, { key: "Beta", color: "lightblue" }, { key: "Gamma", color: "lightgreen" }, { key: "Delta", color: "lightgreen" } ], [ { from: "Alpha", to: "Beta" }, { from: "Gamma", to: "Delta" } ]); } else { // load the second model diagram.layout = $(go.TreeLayout, { angle: 90 }); diagram.model = new go.GraphLinksModel( [ { key: "One", category: "TypeTwo", color: go.Brush.randomColor() }, { key: "Two", category: "TypeTwo", color: go.Brush.randomColor() }, { key: "Three", category: "TypeTwo", color: go.Brush.randomColor() }, { key: "Four", category: "TypeTwo", color: go.Brush.randomColor() }, { key: "Five", category: "TypeTwo", color: go.Brush.randomColor() }, { key: "Six", category: "TypeTwo", color: go.Brush.randomColor() }, { text: "Some comment", category: "AnotherType" } ], [ { from: "One", to: "Two" }, { from: "One", to: "Three" }, { from: "Three", to: "Four" }, { from: "Three", to: "Five" }, { from: "Four", to: "Six" } ]); } firstModel = !firstModel; }
請注意,更改模型會破壞未保留在模型中的所有狀態(tài),例如當(dāng)前選擇的部件,如果沒有針對它們的數(shù)據(jù)綁定,則所有節(jié)點的位置等等。可以在關(guān)聯(lián)之前將它們保存在模型中。
兩張圖重復(fù)使用一個DIV
有時,用戶希望一次處理兩個或多個圖并保持所有圖狀態(tài)。在這種情況下,您可能希望在頁面上放置兩個圖(就像所有帶有調(diào)色板的示例一樣),或者您可能希望將圖放入多個“選項卡”或其他某種機(jī)制中,例如Planogram示例對其進(jìn)行處理四個調(diào)色板。
另外,您可能希望通過換出兩個圖,將它們在同一DIV中一次顯示一次。您可以通過在第一個圖上將Diagram.div設(shè)置為null,并在第二個圖上設(shè)置Div 來交換div 。
// A very minimal Diagram diagram.nodeTemplate = $(go.Node, "Auto", $(go.Shape, "Circle", new go.Binding("fill", "color")), $(go.TextBlock, { margin: 3 }, // some room around the text new go.Binding("text", "key")) ); diagram.model = new go.GraphLinksModel([ { key: "Alpha", color: "lightblue" }, { key: "Beta", color: "orange" } ], [ { from: "Alpha", to: "Beta" }, ]); var diagram2 = $(go.Diagram); diagram2.nodeTemplate = $(go.Node, "Auto", $(go.Shape, "Rectangle", { fill: 'lime' }), $(go.TextBlock, { margin: 5, font: '22px sans-serif' }, new go.Binding("text", "key")) ); diagram2.model = new go.GraphLinksModel([ { key: "BigNode1" }, { key: "BigNode2" }, { key: "BigNode3" }, ], [ ]); var currentDiagram = diagram; // Toggle the Diagram within this DIV with this button var button2 = document.getElementById('button2'); button2.addEventListener('click', function() { // Set one Diagram.div to null, and the other Diagram.div to this div if (currentDiagram === diagram) { var div = diagram.div; diagram.div = null; diagram2.div = div; currentDiagram = diagram2; } else { var div = diagram2.div; diagram2.div = null; diagram.div = div; currentDiagram = diagram; } });
如果選擇一個節(jié)點并移動它,然后來回切換圖,您將看到選擇和節(jié)點定位仍然存在。兩個圖都保留在內(nèi)存中,只有Div被交換以使用一個或另一個。
永久刪除圖
您可能希望刪除圖表,并確保它不占用任何內(nèi)存。為此,如果尚未在其中創(chuàng)建對圖表或GraphObjects或工具或布局的任何其他引用,則可以編寫:
myDiagram.div = null; myDiagram = null; // Assumes this is the only reference to your Diagram如果您使用過圖片,則還應(yīng)該清除圖片緩存,GoJS創(chuàng)建了圖片緩存以存儲源URL到圖片元素的映射:
// Clear any Image references that GoJS is holding onto go.Picture.clearCache();
====================================================
想要購買GoJS正版授權(quán)的朋友可以
有關(guān)產(chǎn)品的最新消息和最新資訊,歡迎掃描關(guān)注下方微信公眾號
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: