Загрузчик пользовательских компонентов KnockoutJS не выполняет `loadViewModel`

контекст

Я возился и пытался создать свою собственную (просто другую) структуру SPA. В этом фреймворке я пытался создать собственный загрузчик компонентов, чтобы иметь возможность делать некоторые инъекции зависимостей и вещей в модели представления, которые я загружаю.

Используемая версия KnockoutJS: 3.3.0

проблема

loadViewModel функция в загрузчике пользовательских компонентов не выполняется при загрузке компонента.

Код для справки ( см. Файл):

injector(function (ko) {
    ko.components.loaders.unshift({
        getConfig: function (name, callback) {
            var parts = name.split("/");
            callback({
                require: "components/" + name + "/" + parts[parts.length - 1]
            });
        },
        loadViewModel: function (name, viewModelConfig, callback) {
            console.log(arguments);
            callback(null);
        }
    });
});

Пожалуйста, не то, что injector функция - это просто какой-то пользовательский преобразователь зависимостей, который я написал. (Почти как define или же require позвоните по компонентам AMD.)

getConfig Функция выполняется должным образом.

Для полного обзора моего doodling, см. Этот репозиторий git

1 ответ

Решение

Если вы не переопределите loadComponent метод, то загрузчик компонента по умолчанию loadComponent будет вызван, который только вызывает loadViewModel если вы предоставили viewModel опция конфигурации.

В вашем getConfig метод вы возвращаете конфиг с require Это означает, что ваш модуль require.js должен предоставить необходимые viewModel опция конфигурации.

Однако в вашем viewModel.js

viewModel: func.apply(this.models[identifier], arguments) 

не правильно установить viewModel собственность, которая осталась undefined

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