【问题标题】:how to use jointjs in nodejs如何在nodejs中使用jointjs
【发布时间】:2016-11-29 13:37:06
【问题描述】:

我是 javascript、jointjs 和 nodejs 的新用户。 我用webstorm搭建了一个nodejs项目,文件结构如下:

/test
 /bin
   www
 /node_modules
 /public
 /routes
   index.js
   users.js
 /views
   error.jade
   index.jade
   layout.jade
 app.js
 pacakge.json

我想在node.js项目中使用jointjs来绘制流程图,所以我根据帖子将index.js改成如下: Explain or demonstrate integration between JointJS and Node.js

index.js

var express = require('express');
var router = express.Router();
var joint = require('jointjs');
var graph = new joint.dia.Graph;

var el1 = new joint.shapes.basic.Rect({position: {x: 50, y: 50}, attrs: {text: {fill: 'yellow'}}});
var el2 = new joint.shapes.basic.Rect({position: {x: 300, y: 200}, attrs: {text: {fill: 'yellow'}}});
var link = new joint.dia.Link({source: {id: el1.id}, target: {id: el2.id}});
graph.addCells([el1, el2, link]);

/* GET home page. */
router.get('/', function (req, res, next) {
    res.render('index', {title: 'Express'});
});

module.exports = router;

然后,我对如何将 graph.toJSON() 对象发送到响应感到困惑?如何在 index.jade 中渲染图形对象? 非常感谢。

【问题讨论】:

    标签: javascript node.js express jointjs


    【解决方案1】:

    如何发送 graph.toJSON() 对象进行响应?

    您可以通过如下渲染函数发送数据到响应:

    res.render('index', {title: 'Express', graph: graph.toJSON()});
    

    如何在 index.jadd 中渲染图形对象

    1. 你需要熟悉玉Jade Lang
    2. 那你可以跟着这个教程http://www.jointjs.com/tutorial
    3. 由于没有joinjs的服务端数据,你可以在浏览器中运行示例代码。

    【讨论】:

    • 非常感谢。我仍然对如何处理客户端中的图形对象感到困惑。我确实需要在服务器和客户端之间进行交换。你想给出一个关于如何接受客户端 html 中的图形的示例代码吗?我应该使用 graph.fromJSON(graphJSON);在客户端html/jade脚本中获取服务器数据?
    • 看到您的解决方案,AJAX 是更好的方法。
    【解决方案2】:

    我通过使用 ajax 来解决这个问题。

    在客户端的 JS 上

    $('#search').on('keyup', function(e){
            if(e.keyCode === 13) {
                var parameters = { search: $(this).val() };
                $.get( '/searching',parameters, function(data) {
                    // $('#results').html(data);
                    // var java = JSON.parse(data);
    
                    var graph = new joint.dia.Graph;
    
                    var paper = new joint.dia.Paper({
                        el: $('#container'),
                        width: 800,
                        height: 200,
                        model: graph,
                        gridSize: 1
                    });
                    var x = JSON.parse(data);
                    graph.fromJSON(x);
                });
            };
        });
    

    在服务器端,

    var joint = require('jointjs');
    var graph = new joint.dia.Graph;
    
    var el1 = new joint.shapes.basic.Rect({
        position: {x: 100, y: 30},
        size: {width: 100, height: 30},
        attrs: {rect: {fill: 'blue'},
        text: { text: 'my box', fill: 'white' }}
    });
    var el2 = el1.clone();
    el2.translate(300);
    var link = new joint.dia.Link({source: {id: el1.id}, target: {id: el2.id}});
    graph.addCells([el1, el2, link]);
    var jsonString = JSON.stringify(graph.toJSON());
    res.send(jsonString);
    

    但是,如果我使用 res.render('index', {title: 'Express', graph: graph .toJSON()}); 有人可以帮忙吗?谢谢。

    【讨论】:

      【解决方案3】:
      var strjson = JSON.stringify(graph.toJSON());
      
      var objjson = JSON.parse(strjson);
      
      graph2.fromJSON(objjson);
      

      【讨论】:

      • 虽然这段代码可以回答问题,但最好解释一下如何解决问题,并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。
      猜你喜欢
      • 2023-04-03
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      相关资源
      最近更新 更多