define(["require", "exports", "js/models/home","templates/home/home.html"
], function(require, exports, __model__, __homeView__) {
var model = __model__;
var homeView=__homeView__;
}
我想写一个.ts
文件,它会生成一个js
这样的文件。
通过编译--module
amd,我可以导入模型并引用jquery
,backboneJs
或任何其他js
文件。
但是,如何像html
一样导入externer requireJs
文件?
答案 0 :(得分:9)
我刚才在一个博客上写了一篇关于require.js和Typescript的文章
http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/
要导入文本文件,您需要引用text.js,然后使用文本!< ...您的文本文件>语法,如下所示。使用require.config进一步简化了require:
require.config({
baseUrl: '../',
paths: {
views: 'app/views',
'text': 'lib/text',
}
});
require([
'text!views/MTodoCollectionView.html'],
(MTodoCollectionViewSnippet) => {
//
});
答案 1 :(得分:2)
我刚刚发现了一个非常简洁的解决方案,用于将带有requirejs文本插件的文本模板作为打字稿模块加载:
假设您配置了像blorkfish这样的require.js:
require.config({
baseUrl: '../',
paths: {
views: 'app/views',
'text': 'lib/text',
}
});
您可以执行以下操作,以便直接从打字稿中加载文本:
declare module "text!views/myview.html" {}
import view = module("text!views/myview.html");
export class MyViewCtrl { //or whatever thingy you want impl in your typescript module
...
checkoutThisTemplate() {
console.log(view); //will print the template as text to console
}
...
生成的JS看起来与您的完全相同:
define(["require", "exports", "text!views/myview.html"],
function(require, exports, , __view__) {
var view = __view__;
....
答案 2 :(得分:1)
我不认为TypeScript编译器对此有支持,但如果我错了,我很乐意纠正。你可以开始discussion around this feature on Codeplex。
只要声明define
函数,就可以在TypeScript文件中手动设置。
declare function define(...params: any[]): void;
define(["require", "exports", "js/models/home","templates/home/home.html"
], function (require, exports, __model__, __homeView__) {
var model = __model__;
var homeView = __homeView__;
});
如果你想在回调中进行类型检查,你需要有点时髦,尽管目前model
和homeView
的类型为any
。如果你有一个特定的例子,我可以尝试为你创建一些东西,但我怀疑它会涉及为你的模块添加一个声明(你可以使用针对TypeScript编译器的标志自动生成)。