Javascript 如何使用jQuery、RequireJS和KnockoutJS创建基本的TypeScript项目
我一直在寻找一个简单的操作方法,用RequireJS、jQuery和KnockoutJS创建Visual Studio 2012 TypeScript项目的最基本示例。有几个例子,但对我来说,有些比我想要的更复杂,所以我开始创建一个操作指南,并将其发布在这里供公众审查。作为问答式的知识共享练习,我回答了自己的问题 对于那些不熟悉的人,这里是所包含组件的快速分解 -Visual Studio扩展,允许脚本通过JavaScript超集语言创建.TS文件。这提供了定义与方法和变量相关联的数据类型的能力,而JavaScript中缺少这种数据类型。通过这样做,编译时检查可以确保正确使用,以减少运行时冲突。在构建VisualStudio项目时,VisualStudio扩展将把脚本编译成实际的JavaScript。因此,此扩展自带自己的编译器-tsc.exe。预期生成的JavaScript文件将部署到生产环境中,而不是源代码.ts文件 -用于HTML文档遍历和操作、事件处理、动画和Ajax交互的JavaScript框架 -依赖加载程序。有时JavaScript引用会变得疯狂。这试图帮助解决这些问题。我的示例显示,即使使用了许多JavaScript文件,HTML也只引用其中一个——加载其他文件的根JavaScript文件 -UI绑定,利用MVVM模式。HTML视图是指视图模型中的变量和方法。视图模型是一个JavaScript对象,JavaScript文件可能是编译.ts文件的结果-请参阅上面的TypeScript -还包括两个明确类型的NuGet软件包。因为TypeScript正在尝试验证数据类型的使用情况,所以它正在执行检查以确保它知道所有引用。JavaScript比这更松散。为了在引用外部JavaScript对象时满足TypeScript,我们需要一种方法来描述我们期望使用的对象。这些定义类型的脚本提供了这个定义。它们不提供任何功能,只为TypeScript编译器提供了清晰性,以便它可以执行这些检查 在下面的示例中,您将看到Javascript 如何使用jQuery、RequireJS和KnockoutJS创建基本的TypeScript项目,javascript,mvvm,knockout.js,requirejs,typescript,Javascript,Mvvm,Knockout.js,Requirejs,Typescript,我一直在寻找一个简单的操作方法,用RequireJS、jQuery和KnockoutJS创建Visual Studio 2012 TypeScript项目的最基本示例。有几个例子,但对我来说,有些比我想要的更复杂,所以我开始创建一个操作指南,并将其发布在这里供公众审查。作为问答式的知识共享练习,我回答了自己的问题 对于那些不熟悉的人,这里是所包含组件的快速分解 -Visual Studio扩展,允许脚本通过JavaScript超集语言创建.TS文件。这提供了定义与方法和变量相关联的数据类型的能力
/// <reference path="../Scripts/typings/requirejs/require.d.ts" />
这就是TypeScript编译器将如何包含requirejs DefiniteType定义文件。创建这些明确类型脚本的组织已经创建了一个庞大的集合。这里我们只提到两个KnockoutJS和RequireJS,因为这是本教程的范围免责声明
本指南将展示一种使用TypeScript、jQuery、KnockoutJS和RequireJS构建基本网站的方法。还有很多其他方法可以做到这一点
开始
安装Visual Studio扩展
为Microsoft Visual Studio 2012 PowerTool 1.0.1.0安装Visual Studio 2012扩展-类型脚本
创建新的VisualStudio项目
启动visual studio 2012。
选择菜单项文件->新建->项目。。。
导航到模板->其他语言->键入此脚本
实际上创建了一个扩展名为.csproj的项目文件
使用TypeScript选择项目类型HTML应用程序
清理
从项目中删除文件app.css、app.ts
添加组件
使用NuGet,添加
RequireJS I为本教程选择了2.1.15版
KnockoutJS我为本教程选择了3.2.0版
jQuery I为本教程选择了2.1.1版
requirejs.TypeScript.DefinitelyTyped我选择了0.2.0版
Jason Jarrett将学习本教程。它安装了一个typescriptdef文件
由Josh Baldwin编写-版本2.1.8
knockout.TypeScript.DefinitelyTyped我选择了0.5.7版
Jason Jarrett将学习本教程
设置项目文件夹
在项目的根目录下创建项目文件夹
应用
模型
视图模型
创建一个基本的TypeScript模型
将TypeScript文件添加到项目文件夹模型
在解决方案资源管理器中的文件夹模型上单击鼠标右键
选择上下文菜单项添加->新建项。。。
在左侧窗格中,高亮显示Visual C
在右侧窗格中,高亮显示TypeScript文件
在“文件名”文本框中,输入myTestModel.ts,然后单击“添加”按钮
修改文件myTestModel.ts
class myTestModel {
public fieldZ: string;
public fieldY: string;
public fieldX: number;
}
export=myTestModel;
创建TypeScript视图模型
将TypeScript文件添加到项目文件夹ViewModels
在解决方案资源管理器中的文件夹ViewModels上单击鼠标右键
选择上下文菜单项添加->新建项。。。
在左侧窗格中,高亮显示Visual C
在右侧窗格中,高亮显示TypeScript文件
在“文件名”文本框中,输入myViewModel.ts
单击“添加”按钮
修改文件myViewModel.ts
/// <reference path="../Scripts/typings/knockout/knockout.d.ts" />
import myTestModel = require("Models/myTestModel");
import ko = require("knockout");
class myViewModel {
public myString: KnockoutObservable<string>;
public myNumber: KnockoutObservable<number>;
public myComplexObject: KnockoutObservable<myTestModel>;
constructor() {
this.myString = ko.observable("some test data");
this.myNumber = ko.observable(987);
var tempComplexObject = new myTestModel;
tempComplexObject.fieldZ = "some bogus test data";
tempComplexObject.fieldY = "another bogus test data";
tempComplexObject.fieldX = 123;
this.myComplexObject = ko.observable(tempComplexObject);
}
myButton_Click() {
alert("I was clicked");
}
}
export=myViewModel;
添加配置
添加RequireJS配置文件
在解决方案资源管理器中的项目文件夹应用程序上单击鼠标右键
选择上下文菜单项添加->新建项。。。
在左侧窗格中,高亮显示Visual C
在右侧窗格中,高亮显示TypeScript文件
在“文件名”文本框中,输入requi
re-config.ts
单击“添加”按钮
修改文件require-config.ts
/// <reference path="../Scripts/typings/requirejs/require.d.ts" />
require.config({
baseUrl: "",
paths: {
"jQuery": "Scripts/jquery-2.1.1",
"knockout": "Scripts/knockout-3.2.0.debug",
"myViewModel": "ViewModels/myViewModel"
},
shim: {
"jQuery": {
exports: "$"
}
},
});
require(["jQuery"], function ($) {
$(document).ready(function () {
require(["knockout", "myViewModel"], (knockout, myViewModel) => {
var viewModel = new myViewModel;
knockout.applyBindings(viewModel);
});
});
});
修改现有文件index.html
需要将视图与视图模型对齐
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>TypeScript HTML App</title>
<script data-main="Application/require-config" src="Scripts/require.js"></script>
</head>
<body>
<h1>TypeScript HTML App</h1>
<div id="myStringTest" data-bind="text: myString"></div>
<input id="myStringTest2" data-bind="value: myString" />
<input id="myNumberTest" data-bind="value: myNumber" />
<input id="myComplexObjectTest" data-bind="value: myComplexObject().fieldZ" />
<button id="myMethodTest" data-bind="click: myButton_Click" >click me</button>
</body>
</html>
运行它
好的,是时候试一试了。Comple,在.ts文件中设置一些断点,然后按F5
结论:
如您所见,示例中没有太多代码。如果运行该示例并单击该按钮,您将发现index.html上的按钮绑定到myViewModel.ts中名为myButton\u click的方法。此外,文本框myStringTest2和myNumberTest都绑定到视图模型中定义的变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>TypeScript HTML App</title>
<script data-main="Application/require-config" src="Scripts/require.js"></script>
</head>
<body>
<h1>TypeScript HTML App</h1>
<div id="myStringTest" data-bind="text: myString"></div>
<input id="myStringTest2" data-bind="value: myString" />
<input id="myNumberTest" data-bind="value: myNumber" />
<input id="myComplexObjectTest" data-bind="value: myComplexObject().fieldZ" />
<button id="myMethodTest" data-bind="click: myButton_Click" >click me</button>
</body>
</html>
require-config.ts文件保存连接的依赖项列表。行knockout.applyBindingsviewModel将myViewModel的实例与html视图相关联
注意TypeScript如何允许使用数据类型声明变量
我希望这本入门书能有所帮助。仅仅把几块放在桌子上就可以让我想象这些组件是如何相互作用的。KnockoutJS有一些很酷的插件,比如knockout映射,它允许从web服务中提取的数据直接绑定到视图模型,而无需中间转换或转换。另外,knockoutjs可以支持模板化——大概是为了实现母版页
为了完整起见,我将添加一个名为Views的项目文件夹,并将我的html保存在那里。我认为这对于MVC/MVVM开发来说更为传统。html的url仍然困扰着我。我喜欢MVC风格的无文件扩展名路由,但这也很酷——特别是因为它只不过是HTML和JavaScript——真正跨平台。除了示例中未包含的web服务调用之外,没有回发,客户端处理速度很快
请随时发表评论…非常感谢。我花了一周时间在网上搜索同一个问题。这是第一个实际有效的建议。我已经能够使用require.js加载jquery和主干。最重要的是,我的断点是在VisualStudio中命中的@barrypicker,谢谢你的全面报道,你能不能加入淘汰绑定处理程序?它们似乎对KO至关重要,但我找不到任何关于将它们用于TS的文档。我的相关问题: