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

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