我正在使用this library向我的jQuery插件添加自定义上下文菜单。但在某些时候我有一个奇怪的问题,我认为这与范围相互作用的方式有关。基本上我有两个对象,它们是相同的,但是以两种非常不同的方式构建,其中一个按预期工作,另一个没有。
我会添加一些我的代码,不幸的是它的大而复杂到足以制作它的jsFiddle,如果有必要,我会尝试制作一个。
$.contextMenu({
selector : [jQUery selector],
build : function() {
// some things to do here...
var contextMenuItems = {}; // list of all the menu entries
var actions = [{ label : "1" }, { label : "2" }];
$.each(actions, function(key, value) {
var newSubMenu = {}; // sub menu
// some other things...
// FIRST OBJECT, DOESN'T WORK
var subMenu = {
sep1 : "-",
remove : {
callback : function() {
console.log(action);
}
}
}
// SECOND OBJECT, WORKS AS EXPECTED
var subMenu2 = {
sep1: "-",
};
subMenu2["remove"] = {
callback : function() {
console.log(action);
}
};
$.extend(contextMenuItems[value.label], { items : $.extend(newSubMenu, subMenu) }); (1)
$.extend(contextMenuItems[value.label], { items : $.extend(newSubMenu, subMenu2) }); (2)
});
}
});
基本上,我为上下文菜单的每个条目添加了相同的子菜单。当我单击子菜单条目"remove"
时,我希望它记录父标签。但是如果我添加'subMenu'
个对象(第(1)行),它总是记录第一个'动作',如果我添加'subMenu2'对象(第(2)行),则会显示正确的标签。有人可以解释我为什么会这样吗?