Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 将对象传递给通过require加载的淘汰组件_Knockout.js_Knockout 2.0 - Fatal编程技术网

Knockout.js 将对象传递给通过require加载的淘汰组件

Knockout.js 将对象传递给通过require加载的淘汰组件,knockout.js,knockout-2.0,Knockout.js,Knockout 2.0,我刚刚开始研究淘汰赛的组成部分 我正在努力做到以下几点 从主模块 var setup = {color:"pink"}; ko.components.register('headerbar', {require:"/headerbar"}); 组件 define(["ko", "text!./headerbar.html"], function(ko, html) { "use strict"; var vm = function(prms){ //use passed setu

我刚刚开始研究淘汰赛的组成部分

我正在努力做到以下几点

从主模块

var setup = {color:"pink"};
ko.components.register('headerbar', {require:"/headerbar"});
组件

define(["ko", "text!./headerbar.html"], function(ko, html) {
"use strict";

var vm = function(prms){
      //use passed setup info here  

};

return { viewModel: vm, template: html };
});

我希望能够做到这一点,这样我就可以传递一些设置细节,而不必通过其参数在组件的每个实例中表达它们,这就是我最终得到的结果

    var ctxPassingLoader = {
        to_pass: {

        },
        loadComponent:function(name, cfg, callback){
            if(cfg.ctx){
                this.to_pass[name] = cfg.ctx;
            }
            app.ko.components.defaultLoader.loadComponent(name, cfg, callback);
        },
        loadViewModel: function(name, original, callback) {
            var ctx = this.to_pass[name] || original.ctx;
            this.to_pass[name] = null;
            if (ctx) {
                var wrapper;
                if(original.createViewModel){
                    wrapper = {
                        createViewModel : function(params, info){
                            original.createViewModel(params, info, ctx);
                        }
                    };
                }else{
                    wrapper = function(params){
                        return original(params, ctx);
                    };
                }
                app.ko.components.defaultLoader.loadViewModel(name, wrapper, callback);


            } else {
                callback(null);
            }
        }
    };
    app.ko.components.loaders.unshift(ctxPassingLoader);
呼叫码

var setup = {color:"pink"};
ko.components.register('headerbar', {require:"/headerbar", ctx:setup});