2016-01-20 63 views
0

問題:如何讓cytoscape.js更新partialy - 在這個時刻(在下面的例子中)我知道只有如何重新加載整個圖節點/邊緣集合中的任何變化。(cytoscape.js&meteor)如何讓cytoscape.js更新partialy

所以如果我正確理解,下面的例子中,功能:

function updateNetworkData(net) { 
    var edges = Edges.find().fetch(); 
    var nodes = Nodes.find().fetch(); 
    net.elements().remove(); // make sure evything is clean 

    if (nodes) net.add(nodes); 
    if (edges) net.add(edges); 
    //net.reset() // render layout 
    net.layout(); 
} 

將重新充分Cytoscape的曲線圖中,當集合邊緣和/節點被改變時,因爲有Tracker.autorun在客戶端JS:

Tracker.autorun(function() { 
    updateNetworkData(net); 
}); 

這意味着,整個圖形是越來越重建,每當我改變任何蒙哥邊緣/節點的任何單個值......這實在是太多了,而不是我想要什麼......

所以讓我重複問題: 如何使cytoscape圖刷新只改變節點/邊? 即當我改變蒙戈節點的屬性名稱,我想Cytoscape中有刷新只有特定節點上以圖形

示例代碼: JS

net= "" //main object 

if (Meteor.isClient) { 
    Tracker.autorun(function() { 
     updateNetworkData(net); 
    }); 
    Template.graf.rendered = function() { 

     console.log("on rendered called"); 

     net = cytoscape({ 
      container: document.getElementById('cy'), 


      ready: function() { 
       console.log("network ready"); 
       updateNetworkData(net); // load data when cy is ready 
      }, 

      style: cytoscape.stylesheet() 
       .selector('node') 
       .style({ 
        'content': function(e) { 
         return e.data("name") 
        }, 

        'font-size': 12, 
        'text-valign': 'center', 
        'color': 'white', 
        'text-outline-width': 2, 
        'text-outline-color': function(e) { 
         return e.locked() ? "red" : "#888" 
        }, 
        'min-zoomed-font-size': 8 
         // 'width': 'mapData(score, 0, 1, 20, 50)', 
         // 'height': 'mapData(score, 0, 1, 20, 50)' 
       }) 
       .selector('edge') 
       .style({ 
        'content': function(e) { 
         return e.data("name") ? e.data("name") : ""; 
        }, 
        'target-arrow-shape': 'triangle', 
       }) 

     }); 

    } 




} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
     // code to run on server at startup 
    }); 
} 



function updateNetworkData(net) { 
    var edges = Edges.find().fetch(); 
    var nodes = Nodes.find().fetch(); 
    net.elements().remove(); // make sure evything is clean 

    if (nodes) net.add(nodes); 
    if (edges) net.add(edges); 
    //net.reset() // render layout 
    net.layout(); 
} 

CSS

#cy { 
    width : 70vw; 
    height: 50vw; 
    position: absolute; 
} 

HTML

<head> 
    <title>hello</title> 
</head> 

<body> 
    <h1>Welcome to Meteor!b</h1> 
    {{>graf}} 
</body> 

<template name="graf"> 
    <div id="cy"></div> 
</template> 

//其基於從https://github.com/maxkfranz/cyedit代碼)

回答

0

確定。所以一段時間後,我發現圖書館的流星,它允許勾上更新/插入一些功能/ ... MongoDB中
matb33:收集鉤:
https://atmospherejs.com/matb33/collection-hooks
有了這個,我可以逐步改變圖.. 一旦我清除我的代碼,我將通過完整的工作示例

請注意訂閱延遲。我跑的問題,我開始有空respose而查詢Collections.Collection訂閱是異步函數...這將例如覆蓋我會過去後


編輯2016年4月2日 - 這個庫matb33:收藏 - 鉤子對於我放在這裏的問題並不是有用的...這個鉤子只適用於設置鉤子的一側......我將在稍後(1-2周)更新完整示例的問題,所以我可以接受它作爲答案......但同時爲,如果有人正在尋找相同的,這裏是快速提示
收集要素:

Elements.find({...your filter...}).observeChanges({ 
      //hook on adding to mongo - see meteor doc for other hooks 
      added: function (id, fields) { 

       } 

只要添加到蒙戈db到Elemenets,鉤子被觸發(服務器/客戶端)