אחד מהספריות החביבות עלי זהו Kendo, יש להם כיום תמיכה מלאה באנגולר, אבל לצערי דוקמנטצייה חסרה עבור אנגולר.

    לאחרונה התבקשתי לכתוב directive של אירוע dblclick עבור כל הגרידים של Kendo.

    השימוש ב – html יראה משהו בסגנון הזה:

    Code Snippet
    <div kendo-grid="grid"
            my-dbl-click="testFunc"
            k-options="gridOPtions">
    </div>

     

    הפוקנציה ב – controller, תהיה פשוטה, ואמורה לקבל את האובייקט המקושר לשורה שעליה לחצו dblclick.

    Code Snippet
    $scope.testFunc = function (item) {
        console.log(item);
    };

     

    הקוד היותר מורכב יהיה ה – directive עצמו כמובן.

    Code Snippet
    app.directive('myDblClick', function () {
        return {
            link: function (scope, elem, attrs) {
                elem.on('dblclick', function () {
                    var uid = $(event.srcElement).parent('tr').data('uid');
                    var item = null;

                    if (scope[attrs.kendoGrid]) {
                        var dataItems = scope[attrs.kendoGrid].dataItems();
                        for (var i = 0; i < dataItems.length; i++) {
                            if (dataItems[i].uid == uid) {
                                item = dataItems[i];
                                break;
                            }
                        }
                    }
                    scope[attrs.myDblClick](item);
                });
            }
        }
    });

     

    כל מה שנצטרך, זה ב – link, להרשם לאירוע dblclick על האלמנט עצמו, בזמן שהאירוע יתרחש, נוציא את המאפיין uid (שקנדו משתמשת בו כדי לייחד כל אובייקט ברשימה) מתוך השורה.

    לאחר מכן נרוץ בלולאה על כל המידע שיש לקנדו ונחפש בתוכם את האלמנט לפי ה – id.

    בכל מקרה (גם אם לא מצאנו) נפעיל את הפונקציה מתוך ה – scope (במקרה שלנו testFunc) שה – directivce קיבל כפרמטר.