обрабатывать событие select контекстного меню

Я использую Aurelia с Kendo UI. Я попробовал контекстное меню. У меня возникли проблемы при вызове функции из select. Не удается найти этот метод. Есть идеи?

$("#menu").kendoContextMenu({                
    orientation: orientation,                
    target: "#listview-context-menu",                
    filter: ".product",                
    animation: {                    
        open: { effects: "fadeIn" },                    
        duration: 500
    },                
    select: function (e) {
        this.doAction(); // this function is not being recognized. 
    }
});

1 ответ

  1. При вызове внутри selectсобытия thisключевое слово будет ссылаться на kendoContextMenuobject. Виджет kendo не имеет функции doAction, а предоставленный вами код не расширяет класс kendo для включения такой функции.

    Если вы сохраняете ссылку на исходный thisконтекст (предполагая, что действие было определено на этом уровне), вам нужно скопировать перед инициализацией kendoContextMenu:

    var originalThis = this;
    $("#menu").kendoContextMenu({                
        orientation: orientation,                
        target: "#listview-context-menu",                
        filter: ".product",                
        animation: {                    
            open: { effects: "fadeIn" },                    
            duration: 500
        },                
        select: function (e) {
            originalThis.doAction();
        }
    });
    

    Однако, если вы хотите расширить конкретный экземпляр kendoContextMenu, вы можете сделать это так:

    $("#menu").kendoContextMenu({                 
        //...
    });
    $("#menu").data("kendoContextMenu").doAction = function() {
        alert("Action done");
    }
    

    Обратите внимание, что если doActionсделать sence для каждого объекта kendoContextMenu, вы также можете расширить прототип kendo.