先贴上源码传送门: https://github.com/flowforever/yaryin.note

记事本网址: http://yindoc.com , 井号后面写你喜欢的文件名即可。

最近在研究NativeScript,NativeScript使用TypeScript,于是就顺便研究了ts。

不得不提到NativeScript源码学习,感觉学习到了不少东西,顺便也从上面扣了一个依赖注入的框架下来用,实际使用感觉非常给力。

文件地址: https://github.com/flowforever/yaryin.note/blob/master/utils/yok.ts

除了稍微修改一下依赖,其他基本没动。

ts 给我的第一印象就是清爽分明,配合WebStorm逆天的自动编译,写的过程中代码哪边编译不通过提示非常详细。

先贴两段代码:

serviceBase.ts

/**
* Created by trump on 15/4/23.
*/
///<reference path="../_references.d.ts"/>
/// <reference path="./_references.d.ts"/>
import db = require('../db/db');
import Future = require("fibers/future");
import Fiber = require('fibers'); export class ServiceBase { constructor(table) {
this.table = table; // 这个table就是mongoose的Model
this.$table = Future.wrap(table); //配合node fibber 解决异步callback hell 太给力了
} table;
$table; getAll() : IFuture<any> {
return this.$table.findFuture.bind(this.table)({});
} add(model): IFuture<any> {
return this.$table.createFuture.bind(this.table)(model);
} findById(id: string): IFuture<any> {
return this.$table.findOneFuture.bind(this.table)({
_id: id
});
} find(query:any): IFuture<any>{
return this.$table.findFuture.bind(this.table)(query);
} findOne(query:any): IFuture<any>{
return this.$table.findOneFuture.bind(this.table)(query);
}
}

documentServices.ts

 /// <reference path="./_references.d.ts"/>
import db = require('../db/db'); import Future = require("fibers/future");
import Fiber = require('fibers');
import sb = require('./servicesBase'); export class Document extends sb.ServiceBase { constructor($db) {
super( $db.Document );
this.db = $db;
} db; getList() : IFuture<any> {
return this.getAll();
} } $injector.register('documentServices', Document); // 眼尖的同学会看到这行代码,没错这边将DocumentService注入到容器里面,在接下来的controller中我们就不需要require DocumentService 这个类写一对的路径了

controller/api.ts

///<reference path="../_references.d.ts"/>
import express = require('express'); import services = require('../../services/documentServices'); class Controller { constructor($documentServices) {
this.services = $documentServices; // 我们这边只需要在构造函数里面指定好依赖的名称,yok框架就帮我们做好一切了
} services;// = <services.Document>$injector.resolve('documentServices'); 'get/:name'(req:express.Request, res:express.Response) {
(()=> {
var doc = this.services.findOne({
name: req.params.name
}).wait();
res.send(doc||{});
}).future()();
} '[post]edit'(req:express.Request, res:express.Response) {
(()=> {
var saved = null;
if(!req.body._id) {
saved = this.services.add({
name: req.body.name
, content: req.body.content
}).wait();
res.send(saved);
} else {
saved = this.services.findById(req.body._id).wait();
saved.content = req.body.content;
saved.name = req.body.name;
saved.save(function(){
res.send(saved);
});
}
}).future()()
} rename(req:express.Request, res:express.Response) { } remove(req, res) { } } $injector.register('apiHomeController', Controller); module.exports = $injector.resolve('apiHomeController');

总体来说:

TypeScript 开发很给力,

NativeScript的那套依赖注入也很给力。

使用TypeScript开发一个在线记事本,支持离线存储的更多相关文章

  1. 利用MVC编程模式-开发一个简易记事本app

    学了极客学院一个开发记事本的课程,利用自己对MVC编程模式的简单理解重写了一遍该app. github地址:https://github.com/morningsky/MyNote MVC即,模型(m ...

  2. 百度AI开放平台 UNIT平台开发在线客服 借助百度的人工智能如何开发一个在线客服系统

    这段时间在研究一些人工智能的产品,对比了国内几家做人工智能在线客服的,有些接口是要收费的,有些是免费的,但是做了很多限制,比如每天调用的接口次数限制是100次.后来就找到了百度的AI,大家也知道,目前 ...

  3. 试着用workerman开发一个在线聊天应用

    聊天功能是很常见的一种功能,Workerman是一款开源高性能异步PHP socket即时通讯框架. 什么是Workerman? Workerman是一款 开源 高性能异步 PHP socket即时通 ...

  4. 我是怎么开发一个小型java在线学习网站的

    2016/1/27 11:55:14 我是怎么开发一个小型java在线学习网站的 一直想做一个自己的网站(非博客),但是又不知道做什么内容的好,又一次看到了w3schools,就萌发了开发一个在线ja ...

  5. 前端每日实战:116# 视频演示如何用 CSS 和原生 JS 开发一个监控网络连接状态的页面

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oPjWvw 可交互视频 此视频是可 ...

  6. AppCache 离线存储 应用程序缓存 API 及注意事项

    使用ApplicationCache接口实现离线缓存 原文:http://www.mb5u.com/HTML5/html5_96464.html 推荐:html5 application cache遇 ...

  7. localForage——轻松实现 Web 离线存储

    Web 应用程序有离线功能,如保存大量数据集和二进制文件.你甚至可以做缓存 MP3 文件这样的事情.浏览器技术可以保存离线数据和大量的储存.但问题是,如何选择合适技术,如何方便灵活的实现. 如果你需要 ...

  8. python 开发一个支持多用户在线的FTP

    ### 作者介绍:* author:lzl### 博客地址:* http://www.cnblogs.com/lianzhilei/p/5813986.html### 功能实现 作业:开发一个支持多用 ...

  9. Python3学习之路~8.6 开发一个支持多用户在线的FTP程序-代码实现

    作业: 开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp s ...

随机推荐

  1. SD/MMC卡初始化及读写流程

    二.MMC/SD卡的模型和工作原理 PIN脚.SD卡总线.SD卡结构.SD卡寄存器.上电过程 SD卡寄存器:  OCR:操作电压寄存器: 只读,32位 第31位: 表示卡上电的状态位   CID: 卡 ...

  2. 嵌入式设备web服务器

    操作系统:ubuntu10.04 前言:    为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器.    现在在嵌入式设备中所使用的web服 ...

  3. 那些年的那些事CISC和RISC发展中的纠缠

    本文来自http://www.cnbeta.com/articles/224544.htm ARM.ARM.ARM,没错ARM仿佛一夜之间就火了,平板.手机等领域随处可见它的影子,甚至已经有人预言未来 ...

  4. Java 获取Linux 的IP地址

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  5. Python常用模块(time, datetime, random, os, sys, hashlib)

    time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ...

  6. Eclipse选中变量名,相同变量都变色显示

    Eclipse选中变量名,相同变量都变色显示 java文件的设置"Window"-"preferences"-"Java"-"Ed ...

  7. UE是什么意思?用户体验设计师与UE设计是什么关系?

    本文来自:http://blog.sina.com.cn/s/blog_a6bebb3f01015h47.html 什么是UE(UE——UE就是用户体验度) 你会发觉他的使用很人性化:功能强大但操作简 ...

  8. C#主要字典集合性能对比[转]

    A post I made a couple days ago about the side-effect of concurrency (the concurrent collections in ...

  9. 监控代码运行时长 -- StopWatch用法例程

    在.net环境下,精确的测量出某段代码运行的时长,在网络通信.串口通信以及异步操作中很有意义.现在做了简单的总结.具体代码如下: (1).首先 using System.Diagnostics; (2 ...

  10. asp.net后台的一些操作

    1.在后台绑定下拉框再返回到前台 protected StringBuilder sq = new StringBuilder();//为了在前台绑定 protected void Page_Load ...