7
define(["require", "exports", "js/models/home","templates/home/home.html"
], function(require, exports, __model__, __homeView__) {

    var model = __model__;
    var homeView=__homeView__;


}

我想写一个.ts文件来生成这样的js文件。

通过编译--moduleamd 我可以导入模型并引用jquery,backboneJs或任何其他js文件。html但是我怎样才能像这样导入外部文件requireJs呢?

4

3 回答 3

9

不久前,我在 require.js 和 Typescript 上整理了一个博客。
http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/
为了导入文本文件,您需要引用文本。 js,然后使用 text!<...your text file> 语法,如下所示。使用 require.config 进一步简化了 require 的使用:

require.config({
    baseUrl: '../',
    paths: {
        views: 'app/views',
        'text': 'lib/text',
    }
});

require([
    'text!views/MTodoCollectionView.html'],
    (MTodoCollectionViewSnippet) => {
        // 
    });
于 2012-11-05T14:31:54.657 回答
2

我刚刚找到了一个非常简洁的解决方案,用于使用 requirejs 文本插件作为 typescript 模块加载文本模板:

假设您像 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__;
....
于 2013-03-14T23:38:39.827 回答
1

我认为 TypeScript 编译器尚不支持此功能,但如果我错了,我很高兴得到纠正。您可以在 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__;
});

如果您想在回调内部进行类型检查,那么您需要变得有点时髦,尽管目前modelhomeViewtype any。如果你有一个具体的例子,我可以尝试为你创建一些东西,但我怀疑它会涉及为你的模块添加一个声明(你可以使用针对 TypeScript 编译器的标志自动生成)。

于 2012-11-05T14:31:53.690 回答