程序员 2014-10-20 一天的奇妙之旅
推荐:《精通Node.js开发》 《Angular.js视频详解》
微信号 forjs_org
周一是个好的开始,code的旅行也开始了。
上网看看有啥,这是一种好习惯,资讯的重要性,对于每个行业都很重要。
- Angular 1.3 发布后,支持
::name
这种一次性绑定功能,没啥高深的,呵呵。 - 还有一篇文章,写的是javascript 代码的发展历史,从无模块概念,到现在的 es6,写的没啥水平,说实话。
- 有个是 jsx 的写法,其实我觉得没必要,未来属于 web components,其他都只是匆匆过客。
- JQUERY ui 发布新版本,修复一堆bug,不过我不太感冒,继续玩我的polymer
- github/fetch 提供了 window.fetch 功能 的 polyfill
fetch('/users.html')
.then(function(response) {
return response.text()
}).then(function(body) {
document.body.innerHTML = body
})
- 说实话网上很多js代码,都停留在原始状态,我一看到这样的代码,无论题目多美,我都不会往下看,因为是过时的,要懂得舍弃。
- SPDY 要火
- 突然有个观点 ** 不要改变标准,遵循标准、扩展标准,才能长久。 ** 很多所谓新技术都昙花一现,因为都自己搞标准,在javascript世界里, 千万不能破坏这个潜规中,否则最终都会失败,jquery最终会没落,原因不解释,polymer会灿烂,原因可以解释,是因为它遵循了web components标准。
资讯看完了,确实没啥大事件。还是计划一下今天 coding 的行程吧:
- 继续完善tree component组件,由于上周我有了很多web component的开发经验。
- domain框架继续完善,需要用es6重写,es6让我很兴奋!
- 录制视频课程
先对 src/Actor.js
做了一些修改:
import Event from "./Event";
import uid = from "shortid";
import EventEmitter from "events/EventEmitter";
var dataKye = Symbol("dataKey"),
isLoadEvents = Symbol("isLoadEvents")
class Actor extends EventEmitter{
constructor() {
this[dataKye] = {};
this.set("id", uid());
this.set("alive", true);
this.uncommittedEvents = [];
}
set(k, v) {
if (arguments.length === 1) {
for (var n in k) {
this.set(n, k[n]);
}
} else {
this[dataKye][k] = v;
}
}
get(k) {
return this[dataKye][k];
}
get json() {
return JSON.parse(JSON.stringify(this[dataKye]));
}
loadEvents(events) {
if (this[isLoadEvents]) return;
events.forEach(event => {
this.when(event);
})
this[isLoadEvents] = true;
}
loadSnap(snap) {
if (this[isLoadEvents]) return;
this.set(snap);
this[isLoadEvents] = true;
}
when(event) {
if (event.name === "remove") {
this.set("alive", false);
}
}
apply(name, data, sagaId, sagaType) {
if (this.get("alive")) {
var event = new Event({
sagaId: sagaId || null,
sagaType: sagaType || null,
aggregateId: this.get("id"),
name: name,
aggregateType: this.constructor.className,
type: "aggregate",
data: data
});
this.when(event);
this.uncommittedEvents.push(event);
this.emit("apply",this);
}
}
remove() {
this.apply("remove");
}
}
module.exports = Actor;
然后把src/Event.js
做一下修改:
import {uid} from 'shorid';
var data = Symbol("data");
var name = Symbol("name");
var id = Symbol("id");
var time = Symbol("time");
export class Event{
/**
* @param data {targetId,targetType,sourceId,sourceType}
*/
constructor(_name = "",data = {}){
this[name] = _name;
this[data] = data;
this[id] = uid();
this[time] = Date.now();
}
get id(){
return this[id];
}
get time(){
return this[time];
}
get name(){
return this[name];
}
get data(){
return JSON.parse(JSON.stringify(this[data]));
}
get json(){
return {
data:this.data,
id:this.id,
name:this.name,
time:this.time
}
}
static reborn(json){
var event = new this();
event[time] = json.time;
event[data] = json.data;
event[name] = json.name;
event[id] = json.id;
}
}