2016-09-30 13 views
1

こんにちは、私はWeb開発の初心者です。私はCytoscape.jsで遊んでいます。私は、Node.js、Express、およびExpress-handlebarsを使用して自分のWebページを実行することにしました。私はCytoscape.jsを使ってグラフを表示したかったのですが、ハンドルバーを使用してサイトスコープオブジェクトを初期化するためのコンテナへの参照を取得する方法がわかりません。 は、ここに私のmain.handlebarsファイルです:Cytoscape.jsでexpress-handlebarsを使用する

<!doctype html> 
<html> 
<head> 
    <title>Hello Cytoscape</title> 
</head> 
<body> 
    {{{body}}} 
</body> 
</html> 

は、ここに私のhome.handlebarsファイルだ:だから私は私の質問が行う方法です推測

/** 
* 
*/ 
'use strict'; 

var express = require('express'); 
var app = express(); 

var cytoscape = require('cytoscape'); 

//layout defaults to main, located in the views layout folder 
var handlebars = require('express-handlebars').create({defaultLayout:'main'}); 

app.use(express.static('public')); 

//sets the template engine to use for the express object 
//a template engine will implement the view part of the app 
app.engine('handlebars', handlebars.engine); 
app.set('view engine', 'handlebars'); 


//initialize the cytoscape object 
var cy = cytoscape({ 

    //<----not sure how to do this-----> 
    container: document.getElementById('cy'), // container to render in 

    elements: [ // list of graph elements to start with 
      { // node a 
        data: { id: 'a' } 
      }, 
      { // node b 
        data: { id: 'b' } 
      }, 
      { // edge ab 
        data: { id: 'ab', source: 'a', target: 'b' } 
      } 
    ], 

    style: [ // the stylesheet for the graph 
      { 
        selector: 'node', 
        style: { 
          'background-color': '#666', 
          'label': 'data(id)' 
        } 
      }, 

      { 
      selector: 'edge', 
        style: { 
        'width': 3, 
        'line-color': '#ccc', 
        'target-arrow-color': '#ccc', 
        'target-arrow-shape': 'triangle' 
        } 
      } 
    ], 

    layout: { 
      name: 'grid', 
      rows: 1 
    }, 
    // initial viewport state: 
    zoom: 1, 
    pan: { x: 0, y: 0 }, 

    // interaction options: 
    minZoom: 1e-50, 
    maxZoom: 1e50, 
    zoomingEnabled: true, 
    userZoomingEnabled: true, 
    panningEnabled: true, 
    userPanningEnabled: true, 
    boxSelectionEnabled: false, 
    selectionType: 'single', 
    touchTapThreshold: 8, 
    desktopTapThreshold: 4, 
    autolock: false, 
    autoungrabify: false, 
    autounselectify: false, 
    // rendering options: 
    headless: false, 
    styleEnabled: true, 
    hideEdgesOnViewport: false, 
    hideLabelsOnViewport: false, 
    textureOnViewport: false, 
    motionBlur: false, 
    motionBlurOpacity: 0.2, 
    wheelSensitivity: 1, 
    pixelRatio: 'auto' 
});      

app.get('/', function (req, res) { 
    var context = {};  
    res.render('home', context); 
}); 

//listener all for unrecognized urls 
//return 404 not found response 
app.use(function(req,res){ 
res.status(404); 
res.render('404'); 
}); 

//listener for errors generate on server 
//return 500 response 
app.use(function(err, req, res, next){ 
console.error(err.stack); 
res.type('plain/text'); 
res.status(500); 
res.render('500'); 
}); 


if (module === require.main) { 
// [START server] 
// Start the server 
var server = app.listen(process.env.PORT || 8080, function() { 
var port = server.address().port; 
console.log('App listening on port %s', port); 
}); 
// [END server] 
} 

module.exports = app; 

<div id="cy"></div> 

は、ここに私の.jsファイルです私はCytoscape.jsグラフをexpress-handlebarsで初期化するために、divコンテナid = "cy"への参照を取得しています。

答えて

1

サーバサイドでCytoscapeを実行すると、あなたの例のようにCytoscapeを実行しても、実行されておらず、クライアントサイドには表示されません。

サーバサイドのみのグラフ分析をしているのでなければ、クライアントサイドでCytoscapeを使用する必要があります。あなたのページ(main.handlebars)はすべてのクライアントのドライバであるため、Cytoscapeコードをそこに置きます。または、ページで<script>タグを使用してCytoscapeコードを参照してください。

関連する問題