在viewModel之前注册淘汰组件的问题

Problems to register a knockout component before viewModel

本文关键字:组件 问题 淘汰 注册 viewModel      更新时间:2023-09-26

我正在尝试注册我的登录模式淘汰组件,但在注册组件之前就已经创建了俯视图。

我正在使用requireJs来组织我的js文件。

这是视图

<div data-bind='component: componentModal'></div>

这是我注册的地方

require(['modals/login']);-在这个里面,有:

require(['jquery', 'knockout', 'text!modals/login.html', 'bootstrap'], function ($, ko, htmlString) {
    ko.components.register('login-modal', {
        viewModel: function (params) {
            console.log(params);
            this.text = ko.observable(params && params.initialText || '');
        },
        template: htmlString
    });
});

然后在我的主js文件中,我有:

<script data-main="scripts/main" src="~/Scripts/require.js"></script>
<script>
    require(['main'], function () {
        require(['modals/login']);
        require(['knockout'], function (ko) {
            var ViewModel = function () {
                var self = this;
                self.componentModal = ko.observable('login-modal');
                return self;
            };
            ko.applyBindings(new ViewModel());

        });
    });
</script>

有人能帮我吗?

我很难理解这一行:

self.componentModal = ko.observable('login-modal');

使用字符串"login-modal"创建一个可观察对象不会有任何作用。它只是一个可观察的字符串登录模式。它不会神奇地包含模态组件。

你的html需要有你的自定义<login-modal></login-modal> html元素,甚至<div data-bind="component: {name: 'login-modal', params: {your: params}"></div>应该工作

您的<脚本>标签错误。我认为应该是:

require(['main', 'modals/login', 'knockout'], function(main, login, ko) {
// ... your code here
});