- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在寻找一个简单的方法,以使用RequireJS,jQuery和KnockoutJS创建Visual Studio 2012 TypeScript项目的最基本示例。有几个示例可供使用,但对我而言,有些示例比我想的要复杂,因此我着手创建方法,并将其发布在此处以供公众审查。作为问答式知识共享练习,我已经回答了自己的问题。
对于那些不熟悉的人,这里是其中包含的组件的快速分割...
TypeScript-一个Visual Studio扩展,允许脚本通过JavaScript的超集语言创建.TS文件。这提供了定义与方法和变量关联的数据类型的功能-否则JavaScript会丢失该数据类型。这样,编译时检查可以确保正确使用,以减少运行时冲突。在构建Visual Studio项目时,Visual Studio扩展会将脚本编译为实际的JavaScript。因此,此扩展程序带有其自己的编译器-tsc.exe。预期生成的JavaScript文件将部署到生产环境,而不是源代码.ts文件。
jQuery-一个用于HTML文档遍历和操纵,事件处理,动画和Ajax交互的JavaScript框架。
RequireJS-依赖加载器。有时JavaScript引用可能会变得疯狂。这试图帮助解决这些问题。我的示例显示,即使使用了许多JavaScript文件,HTML也仅引用其中一个-加载其他JavaScript文件的根JavaScript文件。
KnockoutJS-UI绑定(bind),利用MVVM模式。 HTML View 引用 View 模型中的变量和方法。 View 模型是一个JavaScript对象(JavaScript文件可能是编译.ts文件的结果-请参见上面的TypeScript)。
DefinitelyTyped-还包括两个DefinitelyTyped NuGet软件包。因为TypeScript试图验证数据类型的使用情况,所以它正在执行检查以确保它知道所有引用。 JavaScript比这更宽松。为了满足TypeScript(在引用外部JavaScript对象时),我们需要一种方法(对TypeScript)描述我们期望使用的对象。这些DefinitelyTyped脚本提供了此定义。它们没有提供功能,只是为TypeScript编译器提供了清晰度,因此它可以执行这些检查。
在下面的示例中,您将看到
/// <reference path="../Scripts/typings/requirejs/require.d.ts" />
最佳答案
免责声明
此操作方法将显示“a” 使用TypeScript,jQuery,KnockoutJS和RequireJS构建基本网站的方式。还有许多其他方法可以做到这一点。
入门
安装Visual Studio扩展
安装Visual Studio 2012扩展-Microsoft Visual Studio 2012 PowerTool 1.0.1.0的TypeScript
http://visualstudiogallery.msdn.microsoft.com/ac357f1e-9847-46ac-a4cf-520325beaec1
创建新的Visual Studio项目
class myTestModel {
public fieldZ: string;
public fieldY: string;
public fieldX: number;
}
export=myTestModel;
/// <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;
/// <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);
});
});
});
<!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>
关于javascript - 如何使用jQuery,RequireJS和KnockoutJS创建基本的TypeScript项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924288/
我已经使用 knockout js 实现了一个简单的 spa,您可以在其中在多个页面之间导航,每个页面都呈现一个 View 模型。菜单是一个 2 级菜单,因此我有主页面和子页面。我用knockout的
我想使用组件作为表格行模板,但似乎找不到方法,这可能吗? 当我执行以下操作时,它不会将组件放在 tbody 中,而是将其放在表格上方。 组件 模板 最佳答案
我希望能够将单击和双击事件绑定(bind)到一段文本。我知道我可以使用 data-bind ="event: { dblclick: doSomething } 双击,但我还需要能够在单击时执行不同的
我是否可以告诉 knockout 映射插件订阅所有属性更改调用某个函数? 我意识到我可以通过这种方式手动订阅属性更改事件: var viewModel = { name: ko.observa
我想要一个可见或不可见,具体取决于我的 javascript 中的 bool 值。 我的 HTML 是: Remove
我想将此 json 映射到自定义对象。问题是项目不是 typeof Item 对象而是普通对象。我在这里缺少什么? 你可以在这里测试:http://jsfiddle.net/5jhpE/ var js
我有一个 self 描述的定义如下: var my_data = { types: { typeA: {fieldX: { type: "string"}}, typeB:
首先看一下: http://pastebin.com/823NMiWc 这是 Knckoutjs + Jquery Raty 插件 假设这些是数据库中的列: story_rev: ko.observa
我正在使用 knockout.js 并尝试设置我的选择绑定(bind)的默认值(不使用 optionCaption),并在有人更改它时捕获该值。
我目前有一个数字框,用户可以在其中输入数字 1、2 或 3,并在此基础上设置一些条件格式。 但是,我希望数字字段成为一个下拉列表,其中显示“短”、“长”和“非常长”之类的内容,但在幕后,传递的实际值是
我正在寻找一些有关如何创建代表我的评论系统中的帖子的模型的指南。本质上,它是 Facebook 的简化版本,其中有不同用户的帖子,每个帖子都有零个或多个评论。亲子关系始终只有一层。 创建 Post 对
我需要为数组的每个元素计算一个可观察值。此计算可观察量的解析需要依赖于每个数组元素上下文中存在的其他属性。 请检查以下示例案例: 这是 KnockoutJS foreach 绑定(bind)到嵌套数组
我在网格中有一个嵌套的组产品选项数组。我想要一个弹出编辑器,列出每个分组产品选项的所有产品(产品选项行),并允许用户检查它们之间的关系。我遇到过多对多关系的示例,但没有看到 self 引用分组多对多的
我正在使用KnockoutJs构建一个搜索列表,代码如下: HTML: 部分Js搜索功能: this.name = ko.observable(''); this.query = ko
我是 KnockoutJS 新手。我有一个按以下方式工作的应用程序: 加载页面时,复杂的数据结构会传递到前端 该数据结构被分成更小的 block ,这些数据 block 被传递给组件 用户与组件交互以
我有一个 ASP.Net MVC 网站,在 View 中使用 KnockoutJS 和 KOGrid。它动态地呈现某一特定列中的超链接,如下所示: cellTemplate: '' 已决定,单击时,浏
我正在使用javascript和knockoutjs来使用viewmodel实现搜索过滤器。我无法让搜索过滤器工作。下面是我的js文件 //Object Constructor Class for L
我使用 KnockoutJS 来创建工作申请网站,并使用 JS 中的 getJSON 方法。 不幸的是,我得到了这个结构: 办公室 纽约 部门 金融 职位 示例 ... IT 物流 营销 华盛顿 部门
我在这里创建了一个问题示例: http://jsfiddle.net/JustinN/qWeLT/1/ 我的实际代码已连接到 ASP.NET Web 方法,因此示例代码已调整为指向公共(public)
在过去的几天里,我对 Knockoutjs 越来越感兴趣。它看起来非常有前途,因为它对 MVVM 模式和 WPF 进行了类似绑定(bind)的建模,但每当它为非 RIA Web 应用程序带来一些有用的
我是一名优秀的程序员,十分优秀!