Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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
Javascript 在使用Typescript和requirejs时,我应该将Knockout.js扩展放在哪里_Javascript_Knockout.js_Requirejs_Typescript - Fatal编程技术网

Javascript 在使用Typescript和requirejs时,我应该将Knockout.js扩展放在哪里

Javascript 在使用Typescript和requirejs时,我应该将Knockout.js扩展放在哪里,javascript,knockout.js,requirejs,typescript,Javascript,Knockout.js,Requirejs,Typescript,我正在将一些javascript代码移植到typescript并使用requirejs。我有一个config.ts: //file config.ts ///<reference path="../require.d.ts" /> ///<reference path="DataLayer.ts" /> require.config({ baseUrl: '/scripts/App/', paths: { 'jQuery': '/scr

我正在将一些javascript代码移植到typescript并使用requirejs。我有一个config.ts:

//file config.ts
///<reference path="../require.d.ts" />
///<reference path="DataLayer.ts" />

require.config({
    baseUrl: '/scripts/App/',

    paths: {
        'jQuery': '/scripts/jquery-1.9.1',
        'ko': '/scripts/knockout-2.2.1',
        'signalR': "/scripts/jquery.signalR-1.0.1",
    },

    shim: {
        jQuery: {
            exports: '$'

        },
         signalR:{
            deps: ["jQuery"]
         },
         ko: {
             deps: ["jQuery"],
             exports: 'ko'
         }
    }
});

// load AMD module main.ts (compiled to main.js)
// and include shims $, _, Backbone

require(['DataLayer', 'signalR', 'ko'], (d ) => {
    alert('test');
    var app = new d.DataLayer();
    app.run();
  //  app.run();

});
我试过: 扩展名

     ///<reference path="knockout.d.ts" />    
    export class KnockoutExtenions {
        // Constructor
        constructor() {
            ko.bindingHandlers.csharpTypes = {
                init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
                    var value = valueAccessor();

                    switch (value) {
                        case 'System.Boolean':
                            element.type = 'checkbox';
                            break;
                        case 'System.String':
                            element.type = 'string';
                            break;
                        case 'System.DateTime':
                            //$(element).replaceWith("<input placeholder='value' data-bind='value:value, uniqueId: name, csharpTypes:type'/>");
                            element.type = 'datetime';
                            break;
                        default:
                            element.type = 'number';
                    }


                }

            };
      }
}
//
导出类KnockoutExtenions{
//建造师
构造函数(){
ko.bindingHandlers.csharpTypes={
init:function(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var value=valueAccessor();
开关(值){
案例“System.Boolean”:
element.type='checkbox';
打破
案例“System.String”:
element.type='string';
打破
案例“System.DateTime”:
//$(元素)。替换为(“”);
element.type='datetime';
打破
违约:
element.type='number';
}
}
};
}
}

但是它在ko.bindinghandlers的csharpTypes上给了我一个错误。

您可以直接扩展现有的TypeScript接口。要定义自己的绑定处理程序,只需执行以下操作:

  • 提供定义文件(例如
    myBindings.d.ts
  • 添加以下代码

    interface KnockoutBindingHandlers {
        csharpTypes: KnockoutBindingHandler;
    }
    
  • 在extensions.ts文件中引用此定义文件

  • 酷,我回家后会试试这个。如果两个接口定义为同一个名称,那么它们就简单地合并了?是的,事实上,这并没有很好的文档记录。我将尝试查找一些引用。要使其正确合并,您必须在d.ts文件中执行此操作吗?我在内联中尝试过它,就在.ts文件中绑定处理程序的正上方,在最新版本的typescript上它似乎不再起作用了。它在以前的版本中是可以工作的。我已经有一段时间没有使用TypeScript了,但是如果你在操场上在线试用,你可以在那里检查它是否工作。是的!无论如何,我有点喜欢把它放在.d.ts文件中,这是一种保存所有自定义绑定记录的好方法
    require(['DataLayer', 'signalR', 'ko'], (d ) => {
            alert('test');
            var app = new d.DataLayer();
            app.run();
          //  app.run();
    
        });
    
         ///<reference path="knockout.d.ts" />    
        export class KnockoutExtenions {
            // Constructor
            constructor() {
                ko.bindingHandlers.csharpTypes = {
                    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
                        var value = valueAccessor();
    
                        switch (value) {
                            case 'System.Boolean':
                                element.type = 'checkbox';
                                break;
                            case 'System.String':
                                element.type = 'string';
                                break;
                            case 'System.DateTime':
                                //$(element).replaceWith("<input placeholder='value' data-bind='value:value, uniqueId: name, csharpTypes:type'/>");
                                element.type = 'datetime';
                                break;
                            default:
                                element.type = 'number';
                        }
    
    
                    }
    
                };
          }
    }
    
    interface KnockoutBindingHandlers {
        csharpTypes: KnockoutBindingHandler;
    }