当在Webix中对数据表使用getContext时,Ajax不起作用

问题描述 投票:1回答:1

我正在设置文件管理器,在文件夹上单击鼠标右键时,它将弹出上下文菜单,然后弹出窗口将使用ajax禁用某些菜单项。但是,当我右键单击数据表中排列的文件夹时,ajax调用不起作用。

这是我的弹出菜单项代码。右键单击数据表中排列的文件夹时出现错误。

webix.js?1.0.0:22356未捕获的TypeError:无法读取未定义的属性'行']

    actions: {
            config: function () {
            var t = this.config.templateName;
            return {
            view: "contextmenu",
                    width: 200,
                    padding: 0,
                    autofocus: !1,
                    css: "webix_fmanager_actions",
                    template: function (e, i) {
                    var s = t(e, i);
                    return "<span class='webix_icon fa-" + e.icon + "'></span>" + s
                    },
                    data: "actionsData"
            }
            },
                    oninit: function () {
this.getMenu().attachEvent("onBeforeShow", function (t) { 

                    var e = this.getContext();
                    var folderid = e.id;

                $.ajax({
                    url: "<?php echo base_url()?>/Directorylist/directory_activity",
                    type: "POST",
                    datatype: 'json',
                    async: false,
                    data: {'folderid':folderid},
                    success: function (data) { 
                     var json = JSON.parse(data);
                        permission = [];
                        permission = json;
                    },
                });

            if (permission[0] == 1 && permission[1] == 0 && permission[2] == 0) {
                    $$(this).disableItem('copy');  
                    $$(this).disableItem('cut');  
                    $$(this).disableItem('paste');  
                    $$(this).disableItem('create');  
                    $$(this).disableItem('remove');  
                    $$(this).disableItem('edit');  
                    $$(this).disableItem('upload');  
                 }  
                    })
                    }
            },
                    actionsData: {
                    config: function () {
                    return [{
                    id: "copy",
                            method: "markCopy",
                            icon: "copy",
                            value: copy
                    }, {
                    id: "cut",
                            method: "markCut",
                            icon: "cut",
                            value: cut
                    }, {
                    id: "paste",
                            method: "pasteFile",
                            icon: "paste",
                            value: paste
                    }, {
                    $template: "Separator"
                    }, {
                    id: "create",
                            method: "createFolder",
                            icon: "folder-o",
                            value: create
                    }, {
                    id: "remove",
                            method: "deleteFile",
                            icon: "times",
                            value: remove
                    }, {
                    id: "edit",
                            method: "editFile",
                            icon: "edit",
                            value: rename
                    }, {
                    id: "upload",
                            method: "uploadFile",
                            icon: "upload",
                            value: upload
                    }]

                    }
                    }

但是当我删除这两行并赋予直接值时,它可以正常工作。

var e = this.getContext();
var folderid = e.id;

删除并添加了2行以上

var folderid = '1';
javascript ajax datatable webix
1个回答
0
投票

您在第二个功能之后失去了this的范围。这是经过时间验证的修复程序:

oninit: function () {
    var self = this;
    this.getMenu().attachEvent("onBeforeShow", function (t) {
        var e = self.getContext();
        var folderid = e.id;

另请参见:Javascript "this" scope

或者,如果您使用的是ES6,则可以使用箭头功能:

oninit: function () {
    this.getMenu().attachEvent("onBeforeShow", (t) => {
        var e = this.getContext();
        var folderid = e.id;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

© www.soinside.com 2019 - 2024. All rights reserved.