简体   繁体   English

我无法在jointJS中关闭对话框

[英]I can't close dialog in jointJS

Here is and a screenshot I uploaded for you I have edited my post, according to your advice in comments, posting my updated version of my code.I enclose in /**/ my original post for helping you. 这是我为你上传的截图,我根据你在评论中的建议编辑了我的帖子,发布了我的代码的更新版本。我附上/ ** /我的原帖以帮助你。

/*In jointJS I try using a `ui.dialog` to delete all my graph with the following code:

    var dialog = new joint.ui.Dialog({
                width: 400,
                title: 'Create new process',
                content: '<b>Cleanup current drawing?</b>',
                closeButton: false,
                buttons: [
                    { action: 'ok', content: 'OK' },
                    { action: 'cancel', content: 'CANCEL' }
                ]
            });

            dialog.on('action:ok', this.graph.clear, this.graph);
            dialog.on('action:cancel', dialog.close, dialog);
            dialog.open();
        },

After pressing OK button I successfully delete my graph but my dialog still remains without being able to delete it.

Any help please? */

Here is my updated code which unfortunately still doesn't work as expected. 这是我更新的代码,遗憾的是仍然没有按预期工作。 I remind you that in this dialog form which displays an OK and Cancel button I want the following ones: 我提醒你,在这个显示OK和Cancel按钮的对话框中我想要以下内容:

1)When pressing OK I want to : a)Delete my current graph And b)Close my dialog 1)当按OK时我想:a)删除我当前的图形和b)关闭我的对话框

2)When pressing Cancel I want to: Close my dialog (Which in my initial version worked successfylly with dialog.close ) 2)当按取消时我想:关闭我的对话框(我的初始版本在dialog.close成功dialog.close

openNew: function() {
        // By pressing Create New Process button, a popup form asks for 
        //our confirmation before deleting current graph
        var dialog = new joint.ui.Dialog({
            width: 400,
            title: 'Create new process',
            content: '<b>Cleanup current drawing?</b>',
            closeButton: false,
            buttons: [
                { action: 'ok', content: 'OK' },
                { action: 'cancel', content: 'CANCEL' }
            ]
        });

        //Since in 'action:ok' of dialog.on the 3rd parameter is used in the
        //callback of multi_hand we must pass dialog and graph both together.To do so
        //we enclose them in an object named together and we pass it instead

        together= {dialog : dialog, graph : this.graph};

        //Since jointJS supports assigning multiple events for same handler
        //BUT NOT multiple handlers for the same event we create function multi_hand
        multi_hand: function (together)
        {  
          together.graph.clear(); 
          together.dialog.close();
        }
        dialog.on('action:ok', multi_hand, together);
        dialog.on('action:cancel', dialog.close, dialog);
        dialog.open();
    }, 

By using this new code my joinjtJS project crashes unexpectedly. 通过使用这个新代码,我的joinjtJS项目意外崩溃。 How will I make OK button work please? 我如何让OK按钮工作?

The third argument in dialog.on is the context passed into the callback function (2nd argument). dialog.on的第三个参数是传递给回调函数的上下文(第二个参数)。 It says, what is bind to this in the callback function. 它说,什么是绑定到this回调函数。 In your example is not clear where the graph is defined, if it is really this.graph . 在您的示例中,不清楚graph的定义位置,如果它确实是this.graph However, you can simply do it like in the following example, without passing the context: 但是,您可以像在以下示例中那样执行此操作,而不传递上下文:

var graph = new joint.dia.Graph;
var paper = new joint.dia.Paper({
    el: $('#paper'),
    width: 650,
    height: 400,
    model: graph,
    linkPinning: false
});

var r = new joint.shapes.basic.Rect({
    position: { x: 50, y: 50 },
    size: { width: 100, height: 40 },
}).addTo(graph);

var dialog = new joint.ui.Dialog({
    width: 400,
    title: 'Confirm',
    content: '<b>Are you sure?</b>',
    buttons: [
        { action: 'yes', content: 'Yes' },
        { action: 'no', content: 'No' }
    ]
});

dialog.on('action:yes', function() {
    graph.clear();
    dialog.close()
});

dialog.on('action:no', dialog.close, dialog);
dialog.open();

if the graph is defined on this : 如果graph定义this

dialog.on('action:yes', function() {
    this.graph.clear();
    dialog.close();
}, this);

I solved my problem this way and I just want to share it with all of you as a reference. 我以这种方式解决了我的问题,我只想与大家分享一下作为参考。

openNew: function() {
    var dialog = new joint.ui.Dialog({
            width: 400,
            title: 'Create new process',
            content: '<b>Cleanup current drawing?</b>',
            closeButton: false,
            buttons: [
                { action: 'ok', content: 'OK' },
                { action: 'cancel', content: 'CANCEL' }
            ]
        });

        dialog.on('action:ok', this.graph.clear, this.graph);
        dialog.on('action:ok action:cancel', dialog.close, dialog);
        dialog.open();
    },

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM