Сортировка массива с помощью Kendo UI Sortable и Angular

Я использую Kendo UI с Angular и Typescript. Я знаю, что Kendo UI и Angular - это боль, но я должен сделать это так...

Представление прекрасно работает, но когда я хочу получить доступ к массиву в событии изменения и изменить порядок массива, переменная не существует. Кажется, это другая область применения. Итак, в этой демонстрации появится предупреждение:

        // Change Event
        changed(e: kendo.ui.SortableEndEvent) {
          console.log(e);
          console.info(this.data);

          // For Demo
          if(this.data == undefined){
            alert("Can not access Data Array");
            return;
          }

            // swap
            var oldElement = this.data[e.oldIndex];
            this.data[e.oldIndex] = this.data[e.newIndex];
            this.data[e.newIndex] = oldElement;
        }

         data = [
          { value: "Val 1" },
          { value: "Val 2"},
          { value: "Value 3"},
          { value: "Value 4"}
        ];

Есть ли обходной путь, чтобы я мог получить доступ к массиву?

У меня есть пример: http://codepen.io/anon/pen/ozbRJA?editors =1010


person webdude    schedule 14.09.2016    source источник
comment
Событие change, скорее всего, вызывается в контексте виджета Sortable. Что-то вроде this.$angular_scope.ctrl.data может сработать. Я не могу проверить это прямо сейчас, к сожалению.   -  person Philipp    schedule 14.09.2016
comment
Работает как часы! В моем основном проекте мне даже пришлось сделать this.$angular_scope.$parent.ctrl.data, но ничего страшного. Благодарю вас!   -  person webdude    schedule 14.09.2016


Ответы (1)


Как прокомментировал Филипп, событие изменения находится в другом контексте. С помощью this.$angular_scope.ctrl.data я могу получить доступ к области контроллера и массиву. Это не очень красиво, но работает.

person webdude    schedule 14.09.2016