1

我正在使用这个库向我的 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) 行),则会显示正确的标签。有人可以解释一下为什么会这样吗?

4

0 回答 0