私はいくつかの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();
});
それはロードされています:
<script data-main="/Scripts/App/config" type="text/javascript" src="~/scripts/require.js"></script>
次を実行するスクリプトタグをページに配置する前に:
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';
}
}
};
拡張機能がノックアウトに追加されました。このコードを今どこに置くか 100% 確信が持てませんか? ページ内にある場合は、requirejs によってノックアウトが読み込まれる前に読み込まれます。私はそれをrequirejsでロードする必要があると思いますが、どうすればよいかわかりません。typescript クラスで、または単に config.ts で?
require(['DataLayer', 'signalR', 'ko'], (d ) => {
alert('test');
var app = new d.DataLayer();
app.run();
// app.run();
});
私が試してみました:
extensions.ts
///<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';
}
}
};
}
}
しかし、ko.bindinghandlers の csharpTypes でエラーが発生します。