Ошибка загрузки модели представления компонентов с выбыванием с использованием requireJS
Я работаю с новой функциональностью компонентов knockout 3.2 и пытаюсь загрузить компоненты с помощью requireJS. Однако у меня странная проблема. В принципе, когда я жестко кодирую модель представления в функции регистра, все работает нормально. Когда я пытаюсь загрузить точно такую же модель представления, используя requireJS, она работает неправильно.
Вот пример HTML-кода для загрузки компонента:
<div data-bind="component: { name: 'test'}"></div>
Вот HTML-код в шаблоне, который будет загружать этот компонент:
<a href="#" data-bind="click: addNew">add</a>
<span data-bind="visible: Adding">test</span>
Когда я пишу свою функцию регистрации, как показано ниже, все работает как положено (это означает, что при загрузке текст «test» не отображается, пока пользователь не щелкнет ссылку «add»):
ko.components.register('test',
{
template: { require: 'text!path/theTemplateFromAbove.html' },
viewModel:
function() {
var self = this;
self.Adding = ko.observable(false);
self.addNew = function() {
self.Adding(true);
}
}
});
Но если я попытаюсь изменить это, чтобы использовать requireJS для загрузки модели представления, это не сработает. «Тестовый» текст отображается сразу, а пользователь не нажимает на ссылку «Добавить». Наблюдаемые на модели представления каким-то образом запутываются.
Вот содержимое файла скрипта (обратите внимание, что модель представления такая же):
define(["knockout"], function (ko) {
function viewModel() {
var self = this;
self.Adding = ko.observable(false);
self.addNew = function () {
self.Adding(true);
}
};
return viewModel;
});
И функция регистрации теперь будет выглядеть так:
ko.components.register('test',
{
template: { require: 'text!path/theTemplateFromAbove.html' },
viewModel: { require: 'path/fileForMyTemplate' }
});
При отладке проблемы я добавил проверку в функцию resolViewModel из knockout-3.2.0. После того, как он вызывает новый viewModelConfig (params), я проверяю, является ли «Добавление» наблюдаемым на объекте. Когда модель представления жестко закодирована в функции регистра, она возвращает true. Когда я использую requireJS для загрузки модели представления, она возвращает false.
Есть идеи о том, что я здесь делаю не так?