Перебирайте опции плагина jQuery - PullRequest
0 голосов
/ 11 ноября 2010

Я не уверен, как это сделать, я думал, что все делал правильно, но, видимо, нет.Во 2-м блоке кода вы увидите вызов console.log () и то, как я думал , вы бы перебрали все item s, но это не работает.Как бы я это сделал?Кроме того, это работа, поэтому весь закомментированный код, но это основная часть!

Заранее спасибо!

Итак, у меня есть это для моего вызова плагина jQuery:

$('p').contextMenu({
                item:{
                    name:'Back',
                    action:function(){
                        alert('Back!');
                    },
                    icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_back.png'
                },
                item:{
                    name:'Forward',
                    action:function(){
                        alert('Forward!');
                    },
                    icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_forward.png'
                }
            });

А вот мой действительный код плагина jQuery:

(function($){
                $.fn.extend({ 
                    //plugin name - animatemenu
                    contextMenu: function(menuitems,options) {
                        if(!options){options == null;}
                        //Settings list and the default values
                        var defaults = {
                        };

                        var options = $.extend(defaults, options);

                        return this.each(function() {
                            var o =options;

                            //Assign current element to variable, in this case is UL element
                            var $obj = $(this);             

                            $obj.mousedown(function(event) {
                                switch (event.which) {
                                    case 1: //Left
                                    //alert('Left mouse button pressed');
                                    break;
                                    case 2: //Middle
                                    //alert('Middle mouse button pressed');
                                    break;
                                    case 3: //Right
                                    //menuitems.item.action();
                                    for(x in menuitems){
                                        console.log(menuitems.item[x])
                                    }
                                    break;
                                    default: //Unknown

                                }
                            });

                        });
                    }
                });
            })(jQuery);

1 Ответ

2 голосов
/ 11 ноября 2010

Ваш объект menuitems может иметь только одно свойство item, и оно перезаписывается в вашем объявлении.Вместо этого сделайте элементы меню массивом:

$('p').contextMenu([
    {
        name:'Back',
        action:function(){
            alert('Back!');
        },
        icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_back.png'
    }, 
    {
        name:'Forward',
        action:function(){
            alert('Forward!');
        },
        icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_forward.png'
    }
]);

Если вы считаете, что его нужно немного упростить для разработчиков, на которых вы ссылаетесь, возможно, сначала просто определите элементы как переменные.

var items = [ {name: 'Forward'}, {name: 'Back'} ];
$('p').contextMenu(items);

Затем вы можете получить доступ к обоим элементам так, как вы изначально рассчитывали:

var len = menuitems.length;
for (var i = 0; i < len; i++;){
    console.log(menuitems[i]);
}

Как примечание, я изменил ваш цикл for in на обычный for.Цикл for in действительно неэффективен, и его следует избегать.(Мой цикл замены также может быть написан более эффективно, но тогда синтаксис начинает выглядеть странно, и ваш комментарий, похоже, указывает на то, что разработчики, с которыми вы работаете, могут немного запутаться (неуважительное намерение)).

...