gpt4 book ai didi

javascript - 在 Webix 中的数据表上使用 getContext 时,Ajax 不工作

转载 作者:行者123 更新时间:2023-11-28 03:36:26 24 4
gpt4 key购买 nike

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

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

webix.js?1.0.0:22356 Uncaught TypeError: Cannot read property 'row' of undefined"

    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';

最佳答案

在第二个函数之后,您失去了 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

关于javascript - 在 Webix 中的数据表上使用 getContext 时,Ajax 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57695395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com