Ошибка загрузки модели представления компонентов с выбыванием с использованием 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.
Любые идеи о том, что я делаю здесь не так?
1 ответ
[скопировано из комментария как ответ, чтобы избежать путаницы]
Твой ko.components.register
строка, заключенная в модуль requirejs?
Я подозреваю, что вы загружаете файл JavaScript knockout.js
до require.js
файл, а затем вы получите доступ к глобальной ko
переменная, чтобы сделать ko.components.register
который отличается ko
объект из загруженного require.js
,