KnockoutJS自定义组件加载器不执行`loadViewModel`

时间:2015-06-22 08:28:04

标签: javascript knockout.js requirejs knockout-components

上下文

我一直在摆弄并试图创建我自己的(只是另一个)SPA框架。在这个框架中,我一直在尝试创建一个自定义组件加载器,以便能够在我加载的viewModel上进行依赖注入。

使用KnockoutJS版本:3.3.0

问题

加载组件时,自定义组件加载器上的loadViewModel函数不会执行。

参考代码(see file):

injector(function (ko) {
    ko.components.loaders.unshift({
        getConfig: function (name, callback) {
            var parts = name.split("/");
            callback({
                require: "components/" + name + "/" + parts[parts.length - 1]
            });
        },
        loadViewModel: function (name, viewModelConfig, callback) {
            console.log(arguments);
            callback(null);
        }
    });
});

请注意,injector函数只是我编写的一些自定义依赖项解析器。 (几乎像对AMD组件的definerequire调用。)

getConfig函数无论如何都会正确执行。

有关我的涂鸦的完整概述,see this git repo

1 个答案:

答案 0 :(得分:1)

如果你没有&#34;覆盖&#34; loadComponent方法将调用默认的组件加载器loadComponent,如果您提供了loadViewModel配置选项,则只会调用viewModel。< / p>

getConfig方法中,您返回的配置为require,这意味着您的require.js模块必须提供必要的viewModel配置选项。

但是在viewModel.js

viewModel: func.apply(this.models[identifier], arguments) 

没有设置viewModel属性undefined