Fork me on GitHub
  2013年6月18日
摘要: 接上一章执行流程1在这一大堆扫描绑定方法中应该会哪些实现?首先我们看avalon能帮你做什么?数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ms-html)类名处理,如隔行变色,掠过变色(ms-class, ms-hover)事件绑定(ms-click)属性处理(ms-checked, ms-href, ms-disabled)数据格式化与验证(过滤器与$watch)将某个元素转为一些功能更强大的UI,如果拖动块,滑动块,弹出层,颜色选择器,手风琴,切换卡……有了avalon,做登录后无缝刷新页面这样操作毫无压力回顾到我们最开始的3个问题: 阅读全文
posted @ 2013-06-18 14:52 【艾伦】 阅读(3155) 评论(5) 推荐(5) 编辑
摘要: 基本上确定了avalon的几个重要元素的关系:M,即model,一个普通的JS对象,可能是后台传过来的,也可能是直接从VM中拿到,即VM.$json。有关的这个$json的名字还在商讨V,即View,HTML页面,通过绑定属性或插值表达式,呈现数据,处理隐藏,绑定事件或动画等各种交互效果。V只与VM打交道。VM,即ViewModel,我们通过avalon.define("xxx", function(vm){vm.firstName = "正美"}),这里的vm是一个临时的对象,用于定义,真正的VM是avalon.define方法的返回值。它上面的$js 阅读全文
posted @ 2013-06-18 09:49 【艾伦】 阅读(5720) 评论(1) 推荐(7) 编辑
摘要: 迷你简单易用的MVVM框架avalon的介绍http://rubylouvre.github.io/mvvm/按照作者的介绍,在HTML中添加绑定,在JS中用avalon.define定义ViewModel,再调用avalon.scan方法,它就能动了!神奇的代码:如上图所示:开发者: 1 定义一个带有自定义标签的HTML结构 2 定义一个简单的JS代码用户操作: 用户在input文本框中改变值时,你就会发现对应的多条相关联的记录都被同步修改问题:事件是什么时候绑定的,因为开发者都没有操作domjs代码中定义的值,如何关联到html代码中html代码中如何实现自动同步视图(input... 阅读全文
posted @ 2013-06-18 08:17 【艾伦】 阅读(6914) 评论(2) 推荐(10) 编辑
  2013年6月16日
摘要: 继 (译)ECMAScript 5 Objects and Properties 全文地址http://ejohn.org/blog/ecmascript-5-objects-and-properties/ @by Aaron新功能新增加一些有趣的新特性已经被引入到语言以下两个方法是非常有用的,用于收集所有的属性的数组对象。Object.keys( obj )将会返回一个字符串格式的数组表示所有可枚举的对象属性名,相同方法的一个实现代码实现:Object.keys = function( obj ) { var array = new Array(); for ( var prop in... 阅读全文
posted @ 2013-06-16 22:35 【艾伦】 阅读(458) 评论(0) 推荐(0) 编辑
摘要: Backbone Backbone.js 是一个在JavaScript环境下的 模型-视图-控制器 (MVC) 框架。任何接触较大规模项目的开发人员一定会苦恼于各种琐碎的事件回调逻辑、以及金字塔般的代码。而且,在传统的Web应用程序代码中,不可避免的都有在应用逻辑中加入显示数据的代码的情况。当项目... 阅读全文
posted @ 2013-06-16 12:20 【艾伦】 阅读(11385) 评论(0) 推荐(20) 编辑
摘要: 原贴:http://ejohn.org/blog/ecmascript-5-objects-and-properties/ @by: Aaron 有一些新的API包含在规范中,但是更多有趣的功能发挥作用是 对象/属性 代码,如何使用能作用你的对象,通过私有的"getters" 和 "settses",阻止枚举,操作,或者删除,甚至防止添加新属性.简而言之:你将能够复制和扩展现有的基于JavaScript的api(如DOM)只使用JavaScript本身。 也许最重要的是,尽管:这些特性将到达在所有主要的浏览器。所有主要的浏览器厂商从事规范并同意实施在他们 阅读全文
posted @ 2013-06-16 11:11 【艾伦】 阅读(777) 评论(0) 推荐(1) 编辑
  2013年6月11日
摘要: 前言: Web应用的功能越来越强,Javascript代码也越来越多,大量的JS代码要以何种架构来组织就成了一个亟待解决的问题。老牌软件架构模式MVC(Model-View-Controller)就是一种相当不错的方案,虽然它定义不明确需要很多时间来思考如何组织,崇尚代码分离增加了调试难度,但毕竟脸熟(……),从用CakePHP的时候就接触过这个概念,以我能理解的方式描述就是:Models用来处理数据,View将处理结果呈现给用户,Controller用来连接这两者。所以一个Web应用的流程通常是这样的:1. 用户在View上进行操作——比如在文本框输入数值或是点击按钮2. Cont... 阅读全文
posted @ 2013-06-11 15:11 【艾伦】 阅读(4109) 评论(3) 推荐(3) 编辑
  2013年6月9日
摘要: 在javascript中有时会看到有两个!!的用法 Js代码varfoo;alert(!foo);//undifined情况下,一个感叹号返回的是true;alert(!goo);//null情况下,一个感叹号返回的也是true;varo={flag:true};vartest=!!o.flag;//等效于vartest=o.flag||false;alert(test); 这段例子,演示了在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0... 阅读全文
posted @ 2013-06-09 15:20 【艾伦】 阅读(19521) 评论(3) 推荐(11) 编辑
  2013年6月8日
摘要: javascript是一门弱类型语言 它的函数形参不指定类型 它的变量在赋值时连同类型一起覆盖所以不存在类型转换问题,等等,不存在类型转换问题?哦 只是赋值时不存在类型转换问题。 javascript的类型转换主要存在于表达式运算过程中,更直接的说,js的类型默认转换几乎全是由运算符引起的,这篇文章里还会讨论显式转换。在js的运算符中 有以下几类+运算符 只作用于字符串和数字- * / %只作用于数字! 只作用于布尔型如果我们对2个变量a 和b使用+运算符 a+b那么 js解释器也许会面对这样一个问题: a和b也许不都是数字并且不都是字符串此时 他将如何做呢?最基本的答案是 调用a 和b的 v 阅读全文
posted @ 2013-06-08 11:33 【艾伦】 阅读(595) 评论(0) 推荐(2) 编辑
  2013年5月26日
摘要: apply方法apply是所有函数都有的方法.它的签名如下:func.apply(thisValue, [arg1, arg2, ...])如果不考虑thisValue的影响,上面的调用等同于:func(arg1, arg2, ...)也就是说,apply允许我们将一个数组"解开"成为一个个的参数再传递给调用函数.让我们分别看看apply使用中的三个技巧.技巧1: 将一个数组传递给一个不接受数组作为参数的函数JavaScript中没有返回一个数组中最大值的函数.但是,有一个函数Math.max可以返回任意多个数值类型的参数中的最大值.再配合apply,我们可以实现我们的目的 阅读全文
posted @ 2013-05-26 14:03 【艾伦】 阅读(656) 评论(0) 推荐(3) 编辑
  2012年11月26日
摘要: [译]JavaScript:函数的作用域链原文:http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx在JavaScript中,函数的作用域链是一个很难理解的东西.这是因为,JavaScript中函数的作用域链和其他语言比如C, C++中函数的作用域链相差甚远.本文详细解释了JavaScript中与函数的作用域链相关的知识,理解这些知识可以帮助你在处理闭包的时候避免一些可能出现的问题.在JavaScript中,函数可以让你在一次调用中执行一系列的操作.有多种方式来定义一个函 阅读全文
posted @ 2012-11-26 10:03 【艾伦】 阅读(488) 评论(2) 推荐(3) 编辑
  2012年11月24日
摘要: vartt='aa';functiontest(){alert(tt);vartt='dd';alert(tt);}test();“太简单了!”这是我当时看到这个题目是的第一想法,于是轻率答题竟成我的致命之伤。我的答案是——aa和dd,解析:第一次输出全局变量的结果,然后局部变量tt覆盖全局变量所引用的值,所以第二次输出结果是dd。任何人见我如此作答,都会认为我是在扫盲——想法及其幼稚(我也这么认为)!网易啊,怎么可能会满意于这种答案!正确的答案应该是:undefined和dd为什么第一次alert的结果是undefined呢?要解释得清楚明白需要用到Javas 阅读全文
posted @ 2012-11-24 13:13 【艾伦】 阅读(302) 评论(0) 推荐(2) 编辑
摘要: 作用域 ScopeJavascript 中的函数属于词法作用域,也就是说函数在它被定义时的作用域中运行而不是在被执行时的作用域内运行。这是犀牛书上的说法。但"定义时"和"执行(被调用)时"这两个东西有些人搞不清楚。简单来说,一个函数A在"定义时"就是 function A(){} 这个语句执行的时候就是定义这个函数的时候,而A被调用的时候是 A() 这个语句执行的时候。这两个概念一定要分清楚。那词法作用域(以下称之为"作用域",除非特别指明)到底是什么呢?它是个抽象的概念,说白了它就是一个"范围" 阅读全文
posted @ 2012-11-24 10:51 【艾伦】 阅读(961) 评论(0) 推荐(3) 编辑
  2012年11月17日
摘要: 在之前介绍的方法中,无论是消息驱动还是Promise,都无法摆脱“回调”这个东西。习惯了命令式编程的我们似乎很难接受回调,因为它的执行顺序和代码编写顺序并不一致。而JavaScript中的回调之所以会有这么多话题值得讨论,我想一方面是因为它有一张长得像Java的脸,而同时却又有如此多的异步特性。反观像Erlang, F#那样生来就是异步的语言,似乎反而没这么多话题好讨论的。异步就要回调吗?这是个问题,习惯了JavaScript中的异步似乎这个问题的答案是肯定的,但Wind.js却扭转了这一点。在同步、阻塞的环境下,我们写下如下代码123str = readFile('...') 阅读全文
posted @ 2012-11-17 10:02 【艾伦】 阅读(3179) 评论(0) 推荐(4) 编辑
摘要: 先举一个例子,如果希望ABCDE这5个函数依次执行,我们可以写出如下代码。A();B();C();D();E();在同步的情况下,这样的代码没有任何问题。但如果ABCDE都是异步的,还需要按次序执行,这样写就不行了。通常我们会为异步函数设置回调,当函数执行完的时候执行回调,例如A(function(){ B(function(){ C(function(){ D(function(){ E(); }); }); });});毫无疑问这样的编程体验是很差的。当异步流复杂的时候回调嵌套... 阅读全文
posted @ 2012-11-17 10:01 【艾伦】 阅读(985) 评论(0) 推荐(3) 编辑