【发布时间】:2015-09-07 15:01:16
【问题描述】:
上下文
我一直在摆弄并尝试创建自己的(只是另一个)SPA 框架。在这个框架中,我一直在尝试创建一个自定义组件加载器,以便能够在我正在加载的视图模型上执行一些依赖注入。
使用的 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 组件的 define 或 require 调用。)
getConfig 函数无论如何都会正确执行。
如需全面了解我的涂鸦,请see this git repo
【问题讨论】:
-
在您的
viewModel.js中,viewModel: func.apply(this.models[identifier], arguments)未正确设置仍保留为undefined的viewModel 属性,因为默认组件的loadComponent方法不会调用您的loadViewModel方法.因此,您需要从viewModel.js返回正确的 viewModel 对象/函数 -
@nemesv 请将其作为答案提交,以便我接受它,因为我相信这是根本原因。无论如何,关于如何让 viewModel 实际上返回它的 viewModel 有什么想法吗?
标签: javascript knockout.js requirejs knockout-components