Не удалось создать экземпляр модуля kendo.directives с помощью JSPM

Я пытаюсь загрузить Kendo UI All интеграцию с Angular, чтобы иметь возможность использовать его встроенные директивы виджета UI.

Я установил пакет с помощью следующей команды: jspm install kendo-ui

В какой-то файл я импортирую jQuery, Angular и Kendo UI:

import jquery from "jquery";
import ng from "angular";
import kendoUi from "kendo-ui";

angular.module("common", [
    "kendo.directives"
]);

мой config.js выглядит следующим образом:

...
 map: {
    "kendo-ui": "github:kendo-labs/bower-kendo-ui@2016.1.125"
 }
...

... и когда я загружаю приложение, я получаю "Failed to instantiate module kendo.directives" сообщение об ошибке.

Кажется, что код Kendo UI Core выполняется до появления Angular, или я так думаю, потому что документация Kendo UI гласит:

Чтобы активировать угловые привязки, загрузите angular.js перед загрузкой Kendo UI. Поэтому загружайте скрипты в порядке, указанном ниже.

Кроме того, я попытался исправить проблему, добавив meta Свойство для config.js:

meta: {
    'kendo-angular': {
        exports: 'kendo',
        deps: [
            "jquery",
            "angular",
            "kendo-ui"
        ]
    }
}

... и запись в map:

"kendo-angular": "github:kendo-labs/bower-kendo-ui@2016.1.125/js/kendo.angular.min"

Теперь похоже kendo.angular.min.js загружен, но выдает следующее сообщение об ошибке: "Cannot read property 'jQuery' of undefined"...

Обновить

Кажется, что проблема вовсе не в порядке загрузки: без использования пробной ошибки, которую я сделал вчера (вещь о map а также meta), Ошибка "Failed to instantiate module kendo.directives" не должно произойти, потому что пакет загружается kendo.ui.core, который уже включает в себя модуль kendo.directives,

С другой стороны, я попытался поставить точку останова на незавершенной версии так называемого файла, и в результате получился код, определяющий Angular. kendo.directives Модуль никогда не выполняется, но в какой-то другой части исходного кода, когда я устанавливаю точку останова, он срабатывает, и Angular присутствует в глобальной области видимости.

1 ответ

Решение

Наконец мне удалось решить проблему.

Наconfig.js:

  ...
  meta: {
    "kendo-ui": {
        deps: ["kendo.ui.core"]
    },
    "kendo.ui.core": {
      "deps": [
        "angular"
      ]
    }
  }
  ...
  map: {
    "kendo-ui": "github:kendo-labs/bower-kendo-ui@2016.1.125",
    "kendo.ui.core": "github:kendo-labs/bower-kendo-ui@2016.1.125/src/js/kendo.ui.core"
  }

После рассмотрения kendo.ui.core Исходный код и пытаясь его отладить, я обнаружил, что их "kendo.ui.core" МодульAMD определен, но никогда не требуется кодом. Таким образом, все модули сгруппированы по "kendo.ui.core" МодульAMD никогда не загружался.

Это причина добавления вручную "kendo.ui.core" как для meta а также map и сила "kendo-ui" зависит от "kendo.ui.core"...

Я все еще думаю, что это не окончательное решение. Я уже опубликовал проблему в репозитории Kendo UI GitHub, которая позволяет двигаться в правильном направлении.

Другие вопросы по тегам