Javascript 在使用Typescript和requirejs时,我应该将Knockout.js扩展放在哪里
我正在将一些javascript代码移植到typescript并使用requirejs。我有一个config.ts: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
//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;
}
酷,我回家后会试试这个。如果两个接口定义为同一个名称,那么它们就简单地合并了?是的,事实上,这并没有很好的文档记录。我将尝试查找一些引用。要使其正确合并,您必须在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;
}