Knockout.js: локальные наблюдаемые в компоненте ViewModel
Я использую компоненты knockout (загружаются через require.js) для создания виджета входа.
Javascript:
ko.components.register('login-widget', {
viewModel: { require: '/components/login-widget.js' },
template: { require: 'text!/components/login-widget.html' }
});
function MyViewModel() {
var self = this;
self.email = ko.observable();
self.password = ko.observable();
self.mode = ko.observable('login');
}
ko.applyBindings(new MyViewModel());
HTML
<div class="container-fluid">
<h1>Hello world</h1>
<login-widget params="{ email: email, password: password, mode: mode}"></login-widget>
</div>
Компонент Javascript
define(['knockout'], function (ko) {
function LoginWidgetViewModel(params) {
var self = this;
self.email = params.email;
self.password = params.password;
self.mode = params.mode;
}
return LoginWidgetViewModel;
});
Фрагмент HTML-кода компонента:
<input type="email" class="form-control" placeholder="email" data-bind="value:email">
Это все работает нормально, но когда я пытаюсь переместить наблюдаемое в LoginWidgetViewModel вместо того, чтобы передавать их в качестве параметров, они не привязываются правильно к модели. Поэтому, когда я использую
define(['knockout'], function (ko) {
function LoginWidgetViewModel(params) {
var self = this;
self.email = ko.observable();
self.password = ko.observable();
self.mode = ko.observable('login');
}
return LoginWidgetViewModel;
});
вместо:
Я получил:
Какие-либо предложения?
1 ответ
Решение
Я загружал knockout и require.js по всему миру, а затем загружал view-модели с использованием require, который загружал другой экземпляр knockout. Я удалил ненужную ссылку на нокаут, и все начало работать так, как я ожидал.
Обнаружено решение проблемы при загрузке модели представления компонентов выбивки с использованием requireJS