Получение внешних параметров в анонимную функцию jQuery - PullRequest
0 голосов
/ 03 мая 2011

Я работаю над функцией, которая возвращает контекстное меню для использования в контексте jsTree (http://www.jstree.com/documentation/contextmenu)). При настройке объекта контекстного меню мне нужно каким-то образом получить некоторые переменные в завернутом вызове другой функции вмой встроенный плагин.

Скрипка здесь http://jsfiddle.net/9sKF5/12/ и код такой:

$(document).ready(function() {

    var treeDef = {
        "rateComponentGroup": {
            title: "Rate Component Group",
            entity: "rateComponentGroup",
            contextMenu: [
                {label: "New...", action: "new", entity: "rateComponentGroup"},
                {label: "Delete...", action: "confirmdelete", entity: "rateComponentGroup"}
            ]
        }

    }

    var clickedNode = "rateComponentGroup";

    if (treeDef[ clickedNode ]) { // do we have setup for this node?

        cntxtMenu = treeDef[ clickedNode ].contextMenu;

        if (cntxtMenu instanceof Array) {

            var menu = {};

            for(var i = 0; i < cntxtMenu.length; i++) {

                // append msg to html to see what we're doing
                $("#message").append(cntxtMenu[i].label + cntxtMenu[i].action + "<br/>");

                // define each context menu item label and action
                menu[i] = {
                    label: cntxtMenu[i].label,
                    action: function() {
                        // 
                        // how to get cntxtMenu[i].label and cntxtMenu[i].action in here?
                        // 
                    }
                }

            }

        }

        // in larger context this block simply returns an object defining a context menu for jsTree
        //    containing a label and an action method to fire when selected
        //    see: http://www.jstree.com/documentation/contextmenu
        // return menu;

    }

});

1 Ответ

0 голосов
/ 03 мая 2011

Вы можете скопировать значение этих объектов в объекты в вашем массиве menu []. Затем используйте их значения в функции action ()

// append msg to html to see what we're doing
$("#message").append(cntxtMenu[i].label + cntxtMenu[i].action + "<br/>");
// define each context menu item label and action
menu[i] = {
   label: cntxtMenu[i].label,
   cntxtAct: cntxtMenu[i].action,
   action: function() {
      // just use the copies in here
      alert(this.label + '\n' + this.cntxtAct);
   }
}

Рабочий пример @ JS Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...