使用TypeScript开发一个在线记事本,支持离线存储
2015-04-26 00:15
519 查看
先贴上源码传送门: 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
documentServices.ts
controller/api.ts
总体来说:
TypeScript 开发很给力,
NativeScript的那套依赖注入也很给力。
记事本网址: 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的那套依赖注入也很给力。
相关文章推荐
- 使用jQuery mobile开发一个基于手机的在线餐馆订餐查询应用(第一部分)
- 使用jQuery mobile开发一个基于手机的在线餐馆订餐查询应用(第一部分)
- 使用jQuery mobile开发一个基于手机的在线餐馆订餐查询应用
- 使用记事本(Notepad)开发一个 hello world 程序
- 使用Node.js开发一个在线聊天应用——准备工作
- 使用Node.js开发一个在线聊天应用——编写后台
- 使用Node.js开发一个在线聊天应用——编写前台
- 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具
- python 开发一个支持多用户在线的FTP
- 使用不同的C++支持库的模块混合开发时,引发异常展开不正常,抛异常竟引出一个SIGSEGV
- 开发一个支持多用户在线的FTP程序
- 使用go语言开发的一个异步服务器
- 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE
- 使用PM2搭建在线vue.js开发环境(以守护进程方式热启动)
- wcf入门教程之在.net471中创建一个使用tcp网络协议的wcf控制台开发测试环境
- 多人共同使用一个github的仓库,实现版本管理,多人开发一个项目
- 使用vue做一个本地记事本(一)
- vue插件开发 使用pdf.js实现手机端在线预览pdf文档
- 使用.NET Core快速开发一个较正规的命令行应用程序
- 一个回到顶部的插件topjs,支持自定义,使用简单,带动画效果