<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>麥町 &#124; 乌冬&#039; &#187; web</title>
	<atom:link href="http://udonmai.com/tag/web/feed" rel="self" type="application/rss+xml" />
	<link>http://udonmai.com</link>
	<description> Life hacking &#039;</description>
	<lastBuildDate>Mon, 23 Jan 2012 02:17:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>不是随便想的</title>
		<link>http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html</link>
		<comments>http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html#comments</comments>
		<pubDate>Mon, 09 Jan 2012 16:05:53 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[学习悟道]]></category>
		<category><![CDATA[TOEFL]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[日本]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=30165</guid>
		<description><![CDATA[怎么说呢，今天在GR上看了很多前辈们写的2011的总结，感觉自己写的话，应该还是流水帐，可能今年结束的时候，可以提一下吧。 很多都是已经工作的了，谈谈技术，谈谈生活，却难免发现现实远没有理想那样美好呢。 可不是嘛，所以对于我自己而言，一个没有上路的学生，做了点拿不出手的事情，却也想大做文章，难免被人当作笑柄。不过今天看到的有一点，确实很感同身受的。 也就是对于我这样一个白菜准web dev而言，做个桌面客户端可是多么陌生的事情，功能的话如果不复杂，一般不需要去了解系统调用（比如我用python），很多底层借口都封装好了，写点逻辑，就差个GUI了。问题的关键是什么呢，这种小东西，很多时候只需要一个脚本的事情，却因为想要强制做成个应用来发布，而硬生生地去套GUI，还想要各种好的交互体验，难免会很吃力的吧。 网页的交互相对熟悉，桌面应用，实在是不拿手，以至于和icys做了挺久的，到头来还是需要命令行，算是半途而废的东西，功能性代码没什么技术含量，还借鉴了前辈的东西，如果拿出来，更是可笑了吧。 正如某前辈说的，开发自由软件，给大众使用，以为很光荣，确实很累人的事情。因为是大众产品，体验时第一位的，除非功能实在是太需要了，那实用性差点也无所谓。但是如果想拿得出手，前期的核心开发反倒是不占太大的比重的，后期的完善甚至运营相比就更加重要了，特别是对于个人而言。 所以嘛，为什么开源的东西web的比较多，因为没有那么麻烦。涉及OS的，偏底层的东西，范围其实很固定，虽然技术含量确实前期会很高。而web的话，更偏向用户，门槛不是很高，做产品更容易，（涉及到性能或者类似高并发之类的其实和web关系不大了）。 自己一直的目标是web架构，但是对桌面应用也没有说绝对不沾边的，说到底，架构到最后还是一回事吧，桌面的话，只是涉及了GUI那一层嘛。 &#160; 果然文章已经毫无章法了。。。总之，现在的目标是toefl，然后是日语和技术。技术上的东西，这个假期可能涉及的就不多了，会拼命做题吧~~下学期才是日语加技术~ 很期待自己，说实话技术是自己永远的最爱，只是各个阶段侧重点不一样罢了~ &#160; 水完 加油！！！ &#160; 你可能会感兴趣这些：2011年11月22日 -- CIPPUS再上线~ 2011年11月5日 -- 我大概不能再这样下去了2011年08月3日 -- todos &#8212; Backbone案例浅析2011年07月12日 -- PHP内容发布2011年04月11日 -- サマーウォーズ &#8212; 夏日大作战 嗯2011年03月13日 -- 模拟post的快感与js跨域的无力2011年03月11日 -- 日本，加油 中国，加油2011年02月27日 -- 日语-一悸2011年01月27日 -- 接了个任务2011年01月16日 -- 利用Twip搭建自己的TwitterAPI]]></description>
			<content:encoded><![CDATA[<p>怎么说呢，今天在GR上看了很多前辈们写的2011的总结，感觉自己写的话，应该还是流水帐，可能今年结束的时候，可以提一下吧。</p>
<p>很多都是已经工作的了，谈谈技术，谈谈生活，却难免发现现实远没有理想那样美好呢。</p>
<p>可不是嘛，所以对于我自己而言，一个没有上路的学生，做了点拿不出手的事情，却也想大做文章，难免被人当作笑柄。不过今天看到的有一点，确实很感同身受的。</p>
<p>也就是对于我这样一个白菜准web dev而言，做个桌面客户端可是多么陌生的事情，功能的话如果不复杂，一般不需要去了解系统调用（比如我用python），很多底层借口都封装好了，写点逻辑，就差个GUI了。问题的关键是什么呢，这种小东西，很多时候只需要一个脚本的事情，却因为想要强制做成个应用来发布，而硬生生地去套GUI，还想要各种好的交互体验，难免会很吃力的吧。</p>
<p>网页的交互相对熟悉，桌面应用，实在是不拿手，以至于和icys做了挺久的，到头来还是需要命令行，算是半途而废的东西，功能性代码没什么技术含量，还借鉴了前辈的东西，如果拿出来，更是可笑了吧。</p>
<p>正如某前辈说的，开发自由软件，给大众使用，以为很光荣，确实很累人的事情。因为是大众产品，体验时第一位的，除非功能实在是太需要了，那实用性差点也无所谓。但是如果想拿得出手，前期的核心开发反倒是不占太大的比重的，后期的完善甚至运营相比就更加重要了，特别是对于个人而言。</p>
<p>所以嘛，为什么开源的东西web的比较多，因为没有那么麻烦。涉及OS的，偏底层的东西，范围其实很固定，虽然技术含量确实前期会很高。而web的话，更偏向用户，门槛不是很高，做产品更容易，（涉及到性能或者类似高并发之类的其实和web关系不大了）。</p>
<p>自己一直的目标是web架构，但是对桌面应用也没有说绝对不沾边的，说到底，架构到最后还是一回事吧，桌面的话，只是涉及了GUI那一层嘛。</p>
<p>&nbsp;</p>
<p>果然文章已经毫无章法了。。。总之，现在的目标是toefl，然后是日语和技术。技术上的东西，这个假期可能涉及的就不多了，会拼命做题吧~~下学期才是日语加技术~ 很期待自己，说实话技术是自己永远的最爱，只是各个阶段侧重点不一样罢了~</p>
<p>&nbsp;</p>
<p>水完 加油！！！</p>
<p>&nbsp;</p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年11月5日 -- <a href="http://udonmai.com/life/%e6%88%91%e5%a4%a7%e6%a6%82%e4%b8%8d%e8%83%bd%e5%86%8d%e8%bf%99%e6%a0%b7%e4%b8%8b%e5%8e%bb%e4%ba%86.html" title="我大概不能再这样下去了">我大概不能再这样下去了</a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年04月11日 -- <a href="http://udonmai.com/life/%e3%82%b5%e3%83%9e%e3%83%bc%e3%82%a6%e3%82%a9%e3%83%bc%e3%82%ba-%e5%a4%8f%e6%97%a5%e5%a4%a7%e4%bd%9c%e6%88%98.html" title="サマーウォーズ &#8212; 夏日大作战 嗯">サマーウォーズ &#8212; 夏日大作战 嗯</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年03月11日 -- <a href="http://udonmai.com/life/cheer_both_japan_and_china.html" title="日本，加油 中国，加油">日本，加油 中国，加油</a></li><li>2011年02月27日 -- <a href="http://udonmai.com/life/sweety_daily/my_japanese_sad.html" title="日语-一悸">日语-一悸</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CIPPUS再上线~</title>
		<link>http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html</link>
		<comments>http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html#comments</comments>
		<pubDate>Tue, 22 Nov 2011 04:54:06 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[平静的日子]]></category>
		<category><![CDATA[cippus]]></category>
		<category><![CDATA[SSDUT]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=30111</guid>
		<description><![CDATA[关于CIPPUS，我想大部分人不了解。在此我就作个简单的介绍。（更多请关注sharpmark前辈的blog） CIPPUS是一个隶属于SSDUT的大型技术组织，成立于03年。而鄙人作为SSDUT的一分子，有幸在有生之年加入了这个团队 = = 组织内部划分不同技术小组数十个（目前是，刚开始很少，但是现在多了，自然不如以前质量好了吧），牛人出过很多，并还在努力出。。。 这么大一个组织，网站是必须的，于是在04年就有了这个计划而事实上也完成了CIPPUS的网站建设（甚至还有BBS等）不t过，由于一些不可抗力，网站最终并没有长期运行下去，甚至一度处于崩坏的地步。后来，多了几年，对，是几年，中心一度决定再把这块拣起来，不过很可惜，由于另外的一些不可抗力（怎么都是不可抗力？），工作一度又停滞了。。。于是在上个学期快结束的时候，当中心再提起这件事的时候，这个重任，很不巧地落到了我的头上。。。 然后为什么到现在才上线呢？可能是我们也遇到了阻力，但是很幸运这一次，我们遇到的是可抗力:) 于是，前台-&#62;后台。。目前的这个beta就这么出来了，其实要做的功能太多了，但是如果再不挂上去，又显得不太好 XD 地址么 cippus.dlut.edu.cn~ 网站其实是横版的，用了很多fixed 加 z-index,所以在高度的处理上做得不是很好，尽量做了对很多浏览器分辨率的兼容（但是比起Gmail的那种兼容，差远了。。。以后改吧） 团队目前2人，以后会慢慢壮大的~（2人都是CIPPUSweb组的，包括我）以后关于网站或者团队的事情，基本会更新在团队博客sugoi里~而同时，作为一个崇尚Geek文化的团队，我们以后也将会将很多东西，一步GitHub，目前帐号就先不公布了，等成型后吧~~敬请期待~ &#160; 最后，上个截图。。 你可能会感兴趣这些：2012年01月10日 -- 不是随便想的2011年08月3日 -- todos &#8212; Backbone案例浅析2011年07月12日 -- PHP内容发布2011年03月13日 -- 模拟post的快感与js跨域的无力2011年01月27日 -- 接了个任务2011年01月16日 -- 利用Twip搭建自己的TwitterAPI2010年12月31日 -- 今天是今年的最后一天啊！！！2010年11月10日 -- 关于GAE的version问题。。。2010年05月26日 -- 傻瓜教程-教你学会使用GappProxy [转自Google文档]2010年05月26日 -- HTML学习笔记]]></description>
			<content:encoded><![CDATA[<p>关于CIPPUS，我想大部分人不了解。在此我就作个简单的介绍。（更多请关注<a href="http://liujiong.com/blog/tag/cippus/">sharpmark前辈的blog</a>）</p>
<p>CIPPUS是一个隶属于SSDUT的大型技术组织，成立于03年。而鄙人作为SSDUT的一分子，有幸在有生之年加入了这个团队 = =</p>
<p>组织内部划分不同技术小组数十个（目前是，刚开始很少，但是现在多了，自然不如以前质量好了吧），牛人出过很多，并还在努力出。。。</p>
<p>这么大一个组织，网站是必须的，于是在04年就有了这个计划而事实上也完成了CIPPUS的网站建设（甚至还有BBS等）不t过，由于一些不可抗力，网站最终并没有长期运行下去，甚至一度处于崩坏的地步。后来，多了几年，对，是几年，中心一度决定再把这块拣起来，不过很可惜，由于另外的一些不可抗力（怎么都是不可抗力？），工作一度又停滞了。。。于是在上个学期快结束的时候，当中心再提起这件事的时候，这个重任，很不巧地落到了我的头上。。。</p>
<p>然后为什么到现在才上线呢？可能是我们也遇到了阻力，但是很幸运这一次，我们遇到的是可抗力:)</p>
<p>于是，前台-&gt;后台。。目前的这个beta就这么出来了，其实要做的功能太多了，但是如果再不挂上去，又显得不太好 XD</p>
<p>地址么 <a href="http://cippus.dlut.edu.cn">cippus.dlut.edu.cn</a>~ 网站其实是横版的，用了很多fixed 加 z-index,所以在高度的处理上做得不是很好，尽量做了对很多浏览器分辨率的兼容（但是比起Gmail的那种兼容，差远了。。。以后改吧）</p>
<p>团队目前2人，以后会慢慢壮大的~（2人都是CIPPUSweb组的，包括我）以后关于网站或者团队的事情，基本会更新在<a href="http://cippus.dlut.edu.cn/sugoi">团队博客sugoi</a>里~而同时，作为一个崇尚Geek文化的团队，我们以后也将会将很多东西，一步GitHub，目前帐号就先不公布了，等成型后吧~~敬请期待~</p>
<p>&nbsp;</p>
<p style="text-align: center;">最后，上个截图。。<a href="http://www.udonmai.com/wp-content/uploads/2011/11/cippus.png"><img class="aligncenter size-full wp-image-30112" title="cippus" src="http://www.udonmai.com/wp-content/uploads/2011/11/cippus.png" alt="" width="492" height="239" /></a></p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li><li>2010年11月10日 -- <a href="http://udonmai.com/code/gae_version.html" title="关于GAE的version问题。。。">关于GAE的version问题。。。</a></li><li>2010年05月26日 -- <a href="http://udonmai.com/code/gappproxy.html" title="傻瓜教程-教你学会使用GappProxy [转自Google文档]">傻瓜教程-教你学会使用GappProxy [转自Google文档]</a></li><li>2010年05月26日 -- <a href="http://udonmai.com/code/html%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0.html" title="HTML学习笔记">HTML学习笔记</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>todos &#8212; Backbone案例浅析</title>
		<link>http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html</link>
		<comments>http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html#comments</comments>
		<pubDate>Wed, 03 Aug 2011 06:28:34 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[javascript/jQuery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=29495</guid>
		<description><![CDATA[Backbone的官方例子中的第一个也是最简单的，便是这个todos。 *&#60;Backbone -- 一个可以在前端组织MVC架构的javascript框架 了解更多&#62; &#8212;&#8212;&#8211; 从功能上来讲，todos就是个to do list（典型的GTD手段之一），我们可以把要做的事情一一罗列，完成后删去即可。这次的这个app完全是个webApp而且不涉及后端。虽然从原理来讲不涉及后端的主要原因是运用到了HTML5的Local Storage特性，直接将信息本地存储而不需要用后端语言来存储信息（DB etc.），但是当完整地看待这个app时，从来没有接触过webApp的同学（像我）还是会惊叹于app整个代码的架构形式，往往写过js的都大概体会过js代码的松散和全局规划的难度，像我这样的菜鸟，如果要做个app，肯定是无数个函数。。。（以下省略） 好吧，言归正传，既然是Backbone让一个WebApp组织得如此井井有条，那我们就不妨来看看，它到底是怎么做的。 &#8212;&#8212;- &#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;- &#8212;&#8211;*&#60;todos源码&#62;&#8212;&#8212; &#8212;&#8212;&#8212; &#8212;&#8212; &#8212;&#8212;- &#8212;&#8212;&#8211; 如果直接看源码的话，新手一下子看明白还是有一点点难度的吧（老鸟拜鄙视我），因为我们都压根不知道Backbone的基本形式啊。这里我就不去讲解Backbone了，要我说估计也不准确更不全面吧。。 附上个自己看过几遍的好文 1*&#60;Backbone JS框架指南&#62; 2*&#60;从豆瓣说和Backbone.js说开去&#62; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;- 这样一来，我们大概了解了Backbone了吧，下面开始正式的介绍，介绍完之后，我想大家对它的Model，Collection以及View这三个最基本的要素会有更深的印象。 &#160; window.Todo = Backbone.Model.extend({ window.TodoList = Backbone.Collection.extend({ window.TodoView = Backbone.View.extend({ window.AppView = Backbone.View.extend({ 上面这4个声明，便是源码的全貌了，也就是说，这个App，一共包括了1个Model，1个Collection和2个View。为什么是2个View？其实稍微仔细看就会明白，第一个view是list里的每个item的view，而第二个view，是整个app的view，如果要合并，并非不可以，只是这样，整体来说更为清晰，代码的的目的性更强，更规整。 &#160; 那么，我们首先来看这个Model （Models 用来创建数据，校验数据，存储数据到服务器端；Models 还可以绑定事件。比如用户动作变化触发 models 的 change 事件，所有展示此model 数据的 views 都会接收到 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #808080;">Backbone</span>的官方例子中的第一个也是最简单的，便是这个<span style="color: #808080;">todos</span>。</p>
<pre>*&lt;Backbone -- 一个可以在前端组织MVC架构的javascript框架 <a href="http://documentcloud.github.com/backbone/">了解更多</a>&gt;</pre>
<p style="text-align: center;">&#8212;&#8212;&#8211;</p>
<p>从功能上来讲，<span style="color: #808080;">todos</span>就是个<span style="color: #000000;">to do list</span>（典型的GTD手段之一），我们可以把要做的事情一一罗列，完成后删去即可。这次的这个app完全是个webApp而且不涉及后端。虽然从原理来讲不涉及后端的主要原因是运用到了HTML5的<a href="http://diveintohtml5.org/storage.html" target="_blank">Local Storage</a>特性，直接将信息本地存储而不需要用后端语言来存储信息（DB etc.），但是当完整地看待这个app时，从来没有接触过webApp的同学（像我）还是会惊叹于app整个代码的架构形式，往往写过js的都大概体会过js代码的松散和全局规划的难度，像我这样的菜鸟，如果要做个app，肯定是无数个函数。。。（以下省略） 好吧，言归正传，既然是<em><strong><span style="color: #888888;">Backbone</span></strong></em>让一个WebApp组织得如此井井有条，那我们就不妨来看看，它到底是怎么做的。</p>
<p style="text-align: center;">&#8212;&#8212;- &#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;- &#8212;&#8211;*&lt;<a href="http://documentcloud.github.com/backbone/docs/todos.html">todos源码</a>&gt;&#8212;&#8212; &#8212;&#8212;&#8212; &#8212;&#8212; &#8212;&#8212;- &#8212;&#8212;&#8211;</p>
<p style="text-align: left;">如果直接看源码的话，新手一下子看明白还是有一点点难度的吧（老鸟拜鄙视我），因为我们都压根不知道Backbone的基本形式啊。这里我就不去讲解<span style="color: #808080;">Backbone</span>了，要我说估计也不准确更不全面吧。。</p>
<p style="text-align: left;">附上个自己看过几遍的好文</p>
<p style="text-align: center;">1*&lt;<a title="Permanent Link to Backbone JS框架指南" href="http://blog.eood.cn/backbone" rel="bookmark">Backbone JS框架指南</a>&gt;</p>
<p style="text-align: center;">2*&lt;<a title="从豆瓣说和Backbone.js说开去" href="http://blog.csdn.net/soasme/article/details/6541417">从豆瓣说和Backbone.js说开去</a>&gt;</p>
<p style="text-align: center;">&#8212;&#8212;&#8211;</p>
<p style="text-align: center;">&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p style="text-align: left;">这样一来，我们大概了解了<span style="color: #808080;">Backbone</span>了吧，下面<strong>开始正式的介绍</strong>，介绍完之后，我想大家对它的<em><span style="color: #808080;">Model</span></em>，<em><span style="color: #808080;">Collection</span></em>以及<em><span style="color: #808080;">View</span></em>这三个最基本的要素会有更深的印象。</p>
<p>&nbsp;</p>
<p style="text-align: center;"><span style="color: #dc222a;">window</span>.Todo = Backbone.Model.extend({</p>
<p style="text-align: center;"><span style="color: #dc222a;">window</span>.TodoList = Backbone.Collection.extend({</p>
<p style="text-align: center;"><span style="color: #dc222a;">window</span>.TodoView = Backbone.View.extend({</p>
<p style="text-align: center;"><span style="color: #dc222a;">window</span>.AppView = Backbone.View.extend({</p>
<p>上面这4个声明，便是源码的全貌了，也就是说，这个App，一共包括了1个Model，1个Collection和2个View。为什么是2个View？其实稍微仔细看就会明白，第一个view是list里的每个item的view，而第二个view，是整个app的view，如果要合并，并非不可以，只是这样，整体来说更为清晰，代码的的目的性更强，更规整。</p>
<p>&nbsp;</p>
<p><strong>那么，我们首先来看这个Model</strong></p>
<p>（Models 用来创建数据，校验数据，存储数据到服务器端；Models 还可以绑定事件。比如用户动作变化触发 models 的 change 事件，所有展示此model 数据的 views 都会接收到 这个 change 事件，进行重绘。）</p>
<p><img class="aligncenter" src="data:image/png;base64,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" alt="" /></p>
<p>代码相对教少，我就都贴过来好了。我们发现，它有一个defaults对象，用来存默认的数据，即每个item的内容和是否完成。然后是初始化函数initialize（），检测如果内容为空，填上默认content。下面还有两个函数，由于是在Model下的，而每个todo list的item都对应一个Model，所以Model里的对象和函数，都只针对自己这个item生效。例如这个toggle变化函数，便是在用户点击某个item的勾选框时，才发动的。clear函数如是。</p>
<p>&nbsp;</p>
<p><strong>然后是Collection</strong><span id="more-29495"></span></p>
<p><img class="aligncenter" src="data:image/png;base64,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" alt="" /></p>
<p>Collection一般来说是存放一些function的，也就是自己写的功能函数。我们看到它在一开始便绑定了model，又引入了localStorage的功能，实现了一些功能函数（后面会游用到，比如计算目前有多少个item时等）后，最终实例化</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANUAAAAUCAIAAACVlu/FAAACnElEQVRoge1ZMY6rMBDda1BScBAOkCriCr+gR0JcYMUBaECipOEG9iJLtBwACYrQcQJqfgEBGzAxIY6j3YleQSYPzDw/zxjy1XU9AKAKX8rvAPCXAf4DqAT4D6AS5/xXx6mp41x9GgBZKCPL0Fwk6/pv9h/Bpledv2/kGIZG4RKWIidmruGg90ybPMjJvQwvVnjb+EnUf09q++b++yL/PZnzr/CfnNy5/pOs7WP/tck1TZrV16aw9cDUA8ZPBJtekVwDUw9MfT6rjlNzIFN8KjhUUM5AR3IuI+teGOYlSwWNif+IeW4yHgnSEfxhuW/57xZa7IkclZCrMSXZzVjyXoUWqH+5F/hkKl1tcqUa7qKeEWzqgU9Ge9lxOwavRb3gU8E6TofjvYFE5iBzp1TntKngzN9k3kJLrJc1P9//qM/3T7Pnv7UgTWFPot0FUZz7Tv1bDMRTiVP/XuC/Ok590tUxtq847yt/MtOm/3jK7gT7ytdxvj+QwBwgh155yNVctAje+ZvMri/Dy+sqH18QphvowbD2PiB3Mf/xVJK3/6vj1I6rxCvyGCeksGX6jzvQO+aA1pdpIgscq39b/hsLoaDIn+U/jkoSnz8INj2cxG3XFL6HbZ7h+HKPwWHLOAVX/XdnIOQYG09hbM50qZ+Oy8gaOcNuxkE8Jn3lMrKsqDyuppD/OoI3XhrsiCzgv9O5H/XfSiW617Oc3ZYi4r+msMdNTOXrwbyro5rIHFzL3bf3DTjOKULuMQ2IO5Cw/zr63cSsxbhSDc1FFH+DmbmHX2o85z+2Bc+bQk7uIv47m/vMpB44aEE0Y7QaV6X5CkzryNzdZgL/fwCk4hZaZ+sfAPAUkPPweQ78B1AJ8B9AJcB/AJUA/wFUAvwHUIn//KBdiVzBhlUAAAAASUVORK5CYII=" alt="" /></p>
<p>以便后面View的调用。</p>
<p>&nbsp;</p>
<p><strong>然后是每个item的View</strong></p>
<p><img class="aligncenter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYkAAAHrCAIAAAC1g/a7AAAgAElEQVR4nO3dv26cShvH8fc2ttyCC/EFuLAiLsDNKdKvhdJHRy5dWLJYKXIVWUp/ZJOzipTOSucGOSnWVY5yAdT7FrAwwDMwLLA8u/uNPkWC+bfD8NsBw5P/JckGALT53+R7AAB1ZBMAjcgmABqRTXa/o4uby6vXqXcDOEnN2bQKvEW026rjpe/Ngij95zr0879P6vV+fnP/mPy5e7i8eP6TJJsk+XP3cDm/uZzf3D9WZq5nk7A4gFGMmU3+ue8v42SjK5seojj5c/dQGRC9XNWzqcPiAAZmzaYomHmeIVjVpxdxEy99Y2Y/XCfx0veXYZDOU2STsHi08IOF7808fxkG5mpXQX1DySZ5+/fvv67/edvpA7tmk2UwRTYB+9Jj3BQv/eynq8A7D+NNkmySaJGlWLz0/WUcL/1gJY+b8sWjhectomQVeDM/XMfhuR+uk2Qd+vmmy7vRJ5usxHGT22AKwAi6Z1O0MMZTbdmUbKLgPIyNbKovni2SbSvLpvJAzMvXPxayCdClazYZMWT81LhS286/zaYkWnjBcptN0uK2bMruVe0H2QTo0ppNlQFLMSUKtkkk5kgxcR36534tm4rFxWxKVoFnuX2u8JouWlRvigHop+X5pjg8t90L98OlNG7aXn+ZgWWcusLicjaV76+b2TdwNr1c3aS3vS/nN5fzhyi2TrSLl376G4CpDydwNIZ49jJamNkRBSd4ltpHeQB2Mshz4cUv+80R1olIh5anF8fAuHhnBYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2HYd16J+HcXlitPDDtdOcjn5HFzeXV6+Tf1jNVoG3iCbeh8ohFndJw362aM6mwT/AOvRnnjfznFY7bfMd0mePglkphqKF580ywappziRNnI93v80V/rl7uH9MNsnr/cXzn/KclWx6ubq5fxy45Qdf55+7h8v5zeXcabVdti403SaJFp6/jHc8vo7HvakvCYdY3CWn/ZzSnrOp02qPLJtG++zRohRA8dL3FlGyiQJhJFWJqiRpyqb4+WMpmwQHkU2dVts7m5JNFMyCaLfj26nXSTOLh9iySw77OSVrNkXBrPjuLX39roLtxOyDRQs/WPjezPOXYZBPXwXeIgzP0znLQV5tU3Nb6To7bD319u/ff13/8zZMoxzWZ6/2sCyb1qFf7biWvlg6G+Pnj/ObS9PV60Ycejw+lWabP70YKzSX3SSv9xdP9xc3l/OH6O7JmF7Te50vVzf3d9uPUA7WauiY20rX2WHrlnVm2ockpR7SdNzlDib3JfshPsihU9dxk9njtz+NFp63iJJV4M38cB2H5364zk6k7LxaBV7rBfAmSYrv/A5bTw2aTQf12eUO6nmzWrdz/k7+HV08RHGyeXyqDArqp2J9yvZ60Pzp6/385v4xebm6ubx4/tM2HOuzzperIlNerkqDGvuA6Hd0cVNbf/PWO3ee+gzbHhIv/eJI1RaUO5htKw3bPby7Th2zKV76ZrSnZ102jMxmNs7PfNl16DfmvXl/pOGsE7c+VtMcyme3dK98/tKwyzmbnl6S5M/dQ/ds+h1dlIZdH+9+b5LX+/nTSz5znk3GGM1cSZ91msv+uXswhzm11b7eG+u0p4+49fbO09w5bd8uUvcQOpjtgDZnU32XWvdzSt2zSRwZtp+fDWMHs4Eaj5O49bEcyme3dMdix9pSrCS/dquftBvXbHqIqvtpySaLPuusZFPDuMkcVZk/ctt6187TNMPesunYxk2VWF0FXu2CtvX8zMalthYpthIFlbGDw9ZTPa/pokX1BtbBfPbKuKzYMT9cJ/HSL9ZjmbMu+/Xcy1X1nBSzqT62qt1O6pxNO6/T2MPsos+288VWHp8q4yaHrTerf5FUO1hDNpWPe7dssh9i8butfT+n1PJ8U7y9XVdcGpgXF+kHs56f4qWKcWGybZf8LqAfLs3mdtp6avhsOpzPXrmjWbpIrHV0h4Fn/Pzx6rUyXihuBs9vLudGZhXXZfmdY/MiKJ2zWzb1Wae5n2bcCDuf3/m+eI7k3wY0bL2RcEPaNZtqx729gzV2hoZdEifGS7/625vJjPfsperh4sj2/dnrj7QIDxBY5jwuIz1/0MXUv/zq93yT/dJk704nm8pfNdJziYf82d2f9u7xXPgBmDybNHT7HZ8LT4dser66eGcFgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0Gj/2bQKvEU0wpqjYOZ5Mz9cT96mAPo7lmyKl76/jKduTQBDac6mVeDNPG/mebMg2iTJJomXfpEs69DfTq/PmawCbxGG5+nEdDiTDm0KwSrbULz0txNLA5+3f//+6/qfN4dPQjYBx6Uhm9ahn8dQPthZh/55GG+SxIwDcc5VkKdPKTjq4yZjnRXu2RQtiqQDcPjs2WSMZTxv5nlZfMTheTq0yf9imdPMINvfM3F43uNW0Tr0ZwQTcGQas0m+SloF/jI2x0rynB2yKZUm1I4pw7gJOC4N13SroLh5VBIF52G09IssEOdsyCbLFVxSiznuNwGnqvFeuHmxZp750cKrhJEwp3WsFG9vkG9HOsV9dK8SW2QTcKqO5dnL0i8QARy8Y8kmnr0EjsvxZBOAY0I2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqpyabf0cXN5dXr1LsBQIeBsun1fn5z/5j8uXu4vHj+Y5/zz93D5fzmcn5z/1j5kVM2/bl7+Hj3e9gmeLmq70wHll1ybRD0IDdyzwNaZ++0wv5cbg23D6fal4bLpocoTv7cPbiMfXbuPQeVTR0aBDuRG3nwbHJe7ev9/Okl/Xv8/HGweDrVvjRuNj0+bb9GtscsSTa1w2z9XqotXgRB/PxxfrNLTtXW+XJ1c3/3/DGdWO7il7WJzrt0qv1pGI7veNcauTg6lV73O7qoH01j4vxmOyQRJ277Sbl/1nqIkU2JeeiFrZd6XXkrtf081b404v2mx6dKJJkHtf6VUp0oLZ4FQfz8cf4Q7VB1QFrny1XeiX9HF9lq/9w95DtT7NgYuwSBe/0JgRgi2++M39FF9ndjYpEp4kRxtVIPKS/y+JSGjm3rrr3uZI2XTcYhEX7Umk3i4tsR1o4pIK7T3O727+Uvz3m9Nw+2SxhcrXfVIuPqddM3m8QeImaTdeuOve50jZpNtuB3zKb6PH/uHj7ePd/veiXful2jlwhZM8YuYXCO2WReABbzixOF1Yo9RLym65RNfMMZxr2ms/xawfWarrb49ubOq1sWvN7X7xbV1in1kuTlSvql4QC7BBd9r+nKI47iSsr4uxgETelQ/+6s9RAjhh6ftkNpcetdep1VvcTjcRn1+abixp4xZjZGrVk/ECeKixu/FKvljkCYR9wl6SLfHGAPuEtw0Sub0l9KlO+FF7/dL2KrfOM8my5NtPTPeg8xnyEwM07YeqdeZxEv/aMuWKbm2Utgn7JffmX/LO4N1SdOvqtW1or+x4Fswmkqj4bEcb38W2YV+v23aYeBbAKgEdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaHQs2bS3spnU5zwmHE3F9lP30nxjSHxd1rFU4CRlM4UX0HftzTsUvpikVkbPjUqLj1G8cZd1th7Nfe082uyn7mVzNlXmabXnspkDpsNpZ9PgBdJ2WWfrR9vXzqPNmNlUqkdTZJNU7m8j9okpy2YKOy9t6Hd0Ufyzqe/2KMkovAjaeoYITedWfdG6n0JJxi6Ldzq9d617adlP16M5zM5jIPupLVeqAiHU8SrNk5m0bKa48+I/jbFYe/2d7iUZS01Xn1NmKe/pWH1R3E+xJKP74h3tXofAtp+OR3OIncdARsumUkkt8ZquuQT9pGUz5Z2Xtx4/f0yHDPlf7NzKnolbtxRIK+qBlGpu1D67e4UzcT+thUDdFt+b9nKUZNPBmDabGsZNk5bN7NqbswF/a58ePptc26d/NrUUAlWTTS3lKMmmgzFaNhU3YtLRSi2bqoUiXepeynM6L+5co1LeeevWH58+3r1GF5XLKLmynVtJxvrW5fKJMuGzd6i+KO2nXJLRffGOdr+mk/az29HssvPHXnlyWiM+3xQX/7FS+Q6FcA3iWPdyf2Uz23ZeKGwoVGitTXQsyShtXZ7Tov7Zu1RfFPdTKMnYZfFO+tS9lEpHdjqaHXb+2CtPTutYnr0EJnDklSenRTYBuziFypPTIpsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqpySYqEAIw7KfuZW6SwpVj23/FuN0WH+Et1mkLQvbvdYf72U/AfupeVuy5cOXYTjubJiy6tqdep/Kzn4Bxs0lJ4crt15pcddOsdthQ0VG012qW4uJtZR6by1FmFRQq77vWd8lW3nOk87NX3UvHXic3ndQZLK1ENo1sxPtNkxauFEdYDVU3N0linoG2io6i/VSzFBcXyzzaRpdidZfiZDOKOtV3yTgDf9eqwQyuRx0C514nNp3YGcRWwuj2U5O3/qORC1duK13YS5KXv/yr45FOldL2Us1SXFwuRyl+dvmDCGearYjddvrjk8LL6u69ztJ0Umcgj6YxajZNV7hyKzvJi7FSveqmbTgzZTYJbNlkj+nyZ5c/SIdsyhZPi3yO1Gf6c+511kqeQnErsmkS417TTVa40lT0QrHqZtEdH58cxk1TVbO01hFtPG2q/8VAdf3CWWffpceny6un+32cpf2u6dx6na2SZ70zdMwmimEOZNTnmyYsXGmu0/wmrN9LLm5/XjxH7eOm6apZyovL5Sjrn13eT/mss+1S6Y74mPrUvXTtdXKFTKkzdMwmimEORM2zl/tAmfpeHP4jGWwohjkUsgntareuYGkoimEO56SyCcDBIJsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmrSgEitM2Xt1LnXXgetpjGbnhs0nak4Mu3jjYznd/nbvxqLlU4ypV1Gp5qLXfM8MHe4jHqy1HNu28yB53/qALpA2280Nlk3s1rk7v6PXOpsM8xPvIpnKNylqxQbmmoq1GpVSB0K32o3Wimz2WuBQLgYoNYp1YeVHZuvM6O+7udS/Fl7QtVUylY1Sve2ltulqvi58/miOg7euH1mqrUhWE6pzuW7eeHToPsYPx7jeJNSptdRrrNRXlGpVSBUL32o/9h3L7KXEpbkssxSm2kq2Igp4RXJvd6xDYsklsJaFUU6H0lVmfQeh11bjJKmHJNVTN0DG+VMRqq05bT46uPueo2VSrUdlQbLBaU1GuUWmpN+Ra+9FSENLdXkpcytuyjgjEIedhZ9PunFtJPEaJXPdSaDqp19mzSc4RcdzkdOAsff4I8sg08ripUqPSWqexXlNRrFFpyaYOtR+tE93spcSlvC2Xs+5Yxk27c24lOZtsgykpHWq9rlJDxrymGz6bpD5PNjkSa1Ra6zTWaiqKNSptR9S99mPjxIqpSlzWW6D6T+msa6nkKe28Wr2u6RqrmOatZK0j6th0Uq+rHuKmOoUds8lh62STM0uNSqnYYPlYFq0v1qgUWt+19qO1IKRsshKXYp1G+52UWivFxf3U6Eqarr0SU4+6l9Jnb2kl8xiJdS/lphN7snCIrdlUu8NtHSs5bp1sGkWtpuIpXID0RyvRSkdr+myy3P2hP7mglWilozV9NgFAHdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCoKZvS/0DZC1aT7yWAU9M6blqH/nkYT7+jAE5K+zVdFJBNAPbNJZtmQTT9jgI4KU73wqNg5vnLlmpHADAcxk0ANNrpflO08DwCC8CIdsqmeOl7Mz9cT773AI7Vbs8QrALGTQDG1PnZy3QigyYAo+KdFQAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoFFbNsVL35sFkcO6xphzjMUV+vXpy9n8y+e3HitZh/55GOf/XAXeIpr8cwE9jJpNljPEaZ3r0J953syrr2F/2fTt69n89mx+ezb/+n2wFQoZ1DubomDmh+vSxGjh+cvYeXHPq60BmNSo13T9v72n/P7/eT2/Pfvwc8h1WrKpp2jhBav69Chw/lJxTjFgbxqySRy5rAJvEYbnnmd+0wpzpl/FhezkkUdD5syNIy/bLhWLG1/+xfTSOt/+/fuv63/e2pvm5/X89v2n//Ipvz59yQdQ3z/cnr378Sud+O7H5w/p8Or2+tt28bcf7+fmxJ/X23+msjUXs5WGZt8/5HNmWWbdkD2DHIdOZBNUah03VdJhFeRBU+3T9TGObdRjHw3FS78WhbU57ast9mcd+vk85fldssmIhiJHrNm0HV7lE+u5lmm6piuyybzE+/4hiy3LhhqHlm6jTsuwC5jWDtlkOef7ZFO0MAZZu2WTGUbZPSljneZ9YlfO46baROu1m1M2/ff5nXEtuV1E3lBDI6c/av7g69CfEUzQSUM2madQ6zrliXF4XrquGeI65SiyiXETDtXY2SR+b1uzKQp2GjfFS796dq0C2+/ydr7fVCRLepOoIZvSGer30d9+vC/dKsq0XNM1bGiTjn3kT+oY0NxvgkoN2VS6x7y9qypmkzjnJkk28fau+fabWZ4zvxfuh8vGdYoT8xvk5a2bl3Xmubd7NqUjmvnt2fzr509fWiKjeP6gtJL8TlY20ZjNvCNu3PDKplg3ZL3nze/pcNB4LvwY9Hq+qfr7B0AFsuk49HounGcvoRDZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQaIpsqryicQQGKHdXeUDptB1fD9lTgxxVvdOhsunb1+rrY/UpXRt6KM0HzF5g0309nbOpuirhwe7f0cXNx7vfzet5ubq5f9xTMzruko3mHuJ0jIY2ToN0qXeq3BTZtG8unWyoeXbaJbESwClnkwqasqkL1/co1Rsgm6oVHbP37L99PfvwI385Nov8vMxj+RhkhdOMMo+iaOEHC9+bef4yDIyClsZrvcVRKZVwMt9PdimwKXKt+WmZ07ZLts4k5M7j0+X85nJ+czl/esnnuXv+mE68eq3NVkwszXnx/Cdb5+/o4qaYeTv95aq6uHWXdPWQZBMF52G0bediBFE/7p2OkdBtLBtS0CD1oVO89HcqYTatUcdN20b/9elLtdiIOfPbj/fGW/UNooXnLaJkFXgzP1zH4bkfrkuVWIpjINaEshfDdM0ms6BCw/trYnVQW5kq1+/nx6c8knIvV3lO/Y4uHqLqGfI7usjSRJzz5SofB73eb1f+5+4hD6ABx2V76SHpu4FGfYsgsh1392MkdxtpQ0oaRCoiRDZZplR+Wp05rT3SXuQ/u/bJmj7LpvIFUdZLShO3h6qpGGbXa7pK1SSHKlfiLrluelPKkdJEKUde7+fFaCjPpvqcUjaVR1Lz3S/ipughYkzIx935GFm6Te9Lp/EapLXe6WFQkU1mcwul13L9s8k69t4hm5rHTWNkU30I05Y4pYlCihlXf9ufiuOvQ+khtmwSjnuXbOpTHmuCBjmS39YNmE2VQWbnhk6S2lA2WpRuDInZZI5X878XNYnS+0HFMN7Sn6TDWdm6OU92dWlbXOr38i5tmgpXlj0+GfeJMi3Z9PjUOG6SY+jlqnqbqVG1lSbtIXJkiMfd/RjJ3abpv7eZsEESKUzjpX+ANXAGe74prwlp3tirNXS5zKNQ+7F8tFyyKTH/K4RiLJOX3AwioxcKxTCtRTulbGq6S9pWHdSyS4n7732LW9TmvfCG0dDFc+Q8bjIu38zLutYxlHO/30cPsUWGfNydj5FUQ9WaTdM2iD2dD64qPM+FqyA837QHr/dm9EjjMhcNo9HTNGmDyN9z69A/4XET+pnkuXBjIHZT/yVgu3SUcXCdfjxTN4j11sQhHiOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgEXUvhzBA3UtaHiih7qV73Uu7KbNJc8sDu6Pupfs8OmlueWB31L3Mp7dlU/GS+sYoHmAbdlU3VLyZnAj/VNfyh1mNDMeEupfiP0XGK2/VMhSVxaUN1YooWK8B3/79+y/jz9//vu2/5ckmTE1FbbkDqXtZDHZqo57y4uKG4qUfrJJ4GfjnQbSJgqHO/D3VkwT2TEU2pdTXvdwkySrwl3FpWCQtLm4oXvr+MgoXYbQMwlVT1YEBxk3D15ME9oy6lymXupebJP/fNapluoT/y0AstBiEyzhZh8EiqKabspY/zEqJOCbUvXSveylOtCwubGgd+lntQfO/6FDa8odZKRHHhOfCITrISok4JmQTag62UiKOCdkEQCOyCYBGZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgUVM2Za998OICgL1rHTetm96YB4BxtF/TDVdpCABcuWTTIfwPIgCOi9O98GFregBAK8ZNADTa6X6TWHQNAIazUzZRsBXAyHZ7hqCh8DYADKDzs5fpRAZNAEbFOysANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENgHQiGwCoBHZBEAjsgmARmQTAI3IJgAakU0ANCKbAGhENnX069OXs/mXz289VrIO/fMwzv+5CrxFNPnnApTZTzbt4fT79vVsfns2vz2bf/0+2AqFDOqdTVEw88N1aWK08Pxl7Ly459XWABydI8mmn9fz27MPP4dcpyWbeooWXrCqT4+CWRA5LB4vfecUAw5aUzZFwXkYLX1v5nkz44t9FaRTvPx0WgXeIgzP04nFV3q8XdabeUU21Re3bWiTvP3791/X/7y1f4yf1/Pb95/+y6f8+vQlH0B9/3B79u7Hr3Tiux+fP6TDq9vrb9vF3368n5sTf15v/5nK1lzMVhqaff+Qz5llmXVD9gxyHDqRTTgZzdlUJMX2pFqHvpky6d9XgTfLhgPFybMKvPyuSj6nuLi4oU2SuGWTEQ1FjlizaTu8yifWcy3TdE1XZJN5iff9QxZblg01jh/dhpaWYRdwfFqyqfolXxoKzbwsfczzavv30lm0nSgv7nxFY+c8bqpNtF67OWXTf5/fGdeS20XkDW3assm8QV63Dv0ZwYTT0T2bhGuKLtkkXZKQTYybgIqO2ZSsAk+cWMumeOkX13H5/SZxcXs27Xy/qUiW9CZRQzalM9Tvo7/9eF+6VZRpuaZr2FDWFPIndbyRxP0mnIyu2VS+LituLQl3keLt3fEgMmYQFh8jm9IRzfz2bP7186cvLZFRPH9QWkl+JyubaMxm3hE3bnhlU6wbst7z5vd0QAXPXu5br+ebitEocOTIpv3r9Vw4z17iRJBNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNBs2maCE9d1N5nKeLygsiY9FQeVJ/K2lAKylpefGUcZ/oZKBsihZFdYHyy6i1x6C/fa2+vFafsjVwf0rf7DOLSRn73/5ktq2VHVvfvvUpW2nwXG76mD23rqkv9fxoY7RSvs5ScbTSW2L5uWlMzOaMl36xVPXFT9eXGdwnOhgim7YvUkRB7TtNeG++S38ahXykHd5o65lN9pmnbKWRxoyOq+2ydY19qedHG6GVkk1S6sxi7R1jYrz007/HS98/376tWc6mLsVa3Se2GjCbzLpx8j5V60lmb/l/+3r24Uf+am72zZYXmSx3taxsm1FksumI1r5DGo50e7qXynum60zfIKmOGaOFHyx8b+b5yzCo7ICw9alaSd55senkT2Spdyp9THNbTU1nP3CT9SXb0awPPZIOtV6buqLLMRK3Xm+rPHqMn8bhuZk1cXjuh+v0NfKwKCFplqXtUqzVcaK0YxXDXNNlLVjdJ7Hpxe+6bd/69elLtdSJOfPbj/fGO/1N5AKbjR2itaOI5T2lBaOF5y2iZBV4Mz9cZ8feupUJW0ncutR08icyGqT6/WxvzNLrym5bn7aVrJ+9NvToUuvVrcs19Jn61gtmmmTlQIxzs5o16bAo7dLx0g9W5WzqWnTMbeLesmm7sfoXoGN/MsuzmT+tzpxWPmn/LwYsBTYb27q18qTtVJGyKVjl04fLpqFbydppak0nfyJz2codCjGvxQGFw9anbSXxs5cvc7KzvUut18au2HaMxK0bM9SnZAkVrISfmtmU3Zlxz6bGC8aWiS2Gy6biEI7Yn8xeJRR+yzXVOeozbjqMbHJtJXHrYtM5ZVPDWWfrFW5bn7aV+mdT567YNlv3bDKPQrlDlq7p4mzly9HHTQ6GzKbsExa9UCzz+O3rWWUs3bk/JUltxB4tard1bLffLM1U70PCOm3ZVP5O6JZNE7aStPNi07VmU3bhY2vkYitRUBk3OWx92lYSP7vZz83byT3kuXkAAAbaSURBVM61Xq1d0eUYiVtPVmHWzSyDlNJ+motXMnQd+ud+0dodi7U6ToyXflupnyGyqTRcr52ltR3NK1Ka9y9r/alcZFKoPFnulPUjKtfnNEbX5R0Tvmpcs6mo8JnfC7ecyZatT9hK9Z0Xm679Ewn3fSulTbe3zJdNTScfuElbyfZNU3T7os8713pt7Awux6hx68U5bzs364ub8VFvAedirc4TzZuVssHGTcIDBNvdOoBCaLs+gjFc6x1CK1XtMlA/vVY6BiM837QO/T2Mm1r0eJZ3T/Z9jh1mK2lot0NspeMw6HPh0aL20ImA9+kAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABpNkU1UIBT0+s9+geMzVDYprEAon971QkL919l/cdfnboGTMUU27YkQBFHQ8grPDuscYPEudQWBEzFANu21mqXx2mT55X6HmoqlqmbyOs26EJWKjl3qNHZavEtdQYeKXMBxGHXcNEY1y/qZ6VwpUb5KshUwdCtxKW/dfXHbRMuPyCacjP1c0w1WpzGtAlG6NeNeKdH2krQwhHEuIydv3Xlx68T8RyQRTpSKbEq51WncJOUCox0qJYrXdP2zSR6LDZVN/LYOJ2rAbNpPncatIhRsdQXrg4516NfuhVtKCLqWuJS37r74pltdQYdqgcBxGOz5pr3UaTSrBRonuaVSolAtUPz/BYUSgs4lLuWtd1k86VRXsL1aIHAceC5cBefnm9qrBQLHgWxSwuG5cLdqgcBxIJsAaEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqRTZskoRQnoM7+s2lvNecUluIE4IpsAqDRMNn08/rdj+/b2pVFIYHiJd50SNJQIbNesUBaZ6mWZkO9pxFLcVLdDdiLobKpiKSf1+lp//bjvVgjxbXSk7TOhlqadeOU4iSbgL0YLJuqN2uMcUe5+EmHbKrdAGrOuIaZWxffvRQngDGMmU3yuOYwsinlXooTwLBGy6bk21f5N19ihcxsys/r4r7PENk0QilOKk8CezFeNpUv64zTu1Yhs5jy5fOn4cZN45TipPIksBc8e9kVlSeBfSCbuqDyJLAvZBMAjcgmABqRTQA0IpsAaEQ2AdCIbAKgEdkEQCOyCYBGTdkUh+ce72cAmELruGkd+pQrArBv7dd0UUA2Adg3l2yaBdH0OwrgpDjdC4+Cmecv46n3FcDpYNwEQKOd7jdFC88jsACMaKdsoi4tgJHt9gzBKmDcBGBMnZ+9TCcyaAIwKt5ZAaAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNADQimwBoRDYB0IhsAqAR2QRAI7IJgEZkEwCNyCYAGpFNCvz69OVs/uXzW4+VrEP/PIzzf64CbxFN/rmAHobKJvlkiIKZ52WCaJh17mvxTZJ8+3o2vz2b357Nv34fpJW+fRUzqHc2RcHMD9elidHC85ex8+KeV1sDMKkRsykKZl6wGnade1x88/N6fnv24eeQzW3Jpp6ihdjOUeD2fRAvfecUA/amMZvipb8d9RhfqqugPBQyB0eet82jeOmL0WCsc3vmrAJvEYbn5obkdUpb77j4Jnn79++/rv95a2+an9fz2/ef/sun/Pr0JR9Aff9we/bux6904rsfnz+kw6vb62/bxd9+vJ+bE39eb/+ZytZczFYamn3/kM+ZZZl1Q/YMchw6kU1QqSGbKrcw8ol54pgDk9ogRT4xVoG3XWe89LO/rwIz0Yql6gMfcevui2+SxC2bjGgocsSaTdvhVT6xnmuZpmu6IpvMS7zvH7LYsmyocXjoNnK0DLuAaTWNm+LwvHobwhj1eN7My4PGMZvKp8H2C9+WcbV1ylt3Xrwj53FTbaL12s0pm/77/M64ltwuIm+o+WMa3wSydej3vO4GxtJ+vylNKGlgYhJzpHbO9M8meSxGNokfgXETDpjbvfAiFFaB/Bu3+le09J1cXMdVruls4VJZp7h198U3SdLjflORLOlNooZsSmeo30d/+/G+dKso03JN17ChrJ3l+02ON5K43wSVGrKpuOvsmSe5eWFl9Ol4ezfayKN16NeeIYgWjdeDpa96YZ3C1rssnvTJpnREM789m3/9/OlLS2QUzx+UVpLfycomGrOZd8SNG17ZFOuGrPe8+T0dDhrPXh6DXs832X6jCkyKbDoOvZ4L59lLKEQ2AdCIbAKgEdkEQCOyCYBGZBMAjcgmABqRTQA0+j9OH+966Frt4AAAAABJRU5ErkJggg==" alt="" /></p>
<p style="text-align: center;">&#8230;&#8230;&#8230;</p>
<p><img class="aligncenter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAScAAAAYCAIAAAA3Y6zaAAAAoklEQVR4nO3asQ2DMABEUdZgAI9DyS6exdkEKXO4zBTUSZMioc9Zcp70Brjmy4BZzvMJJC3DF8C/UR2kqQ7SVAdpqoM01UHau7retlLWUu/DB8H0Ps+6R9u31sdvgrl9PWEeVXXwc5fq1nqM3wRzu35NOepa9lsfPQsm5qyDNO91kKY6SHNzAGluySHNH2GQpjpIUx2kqQ7SVAdpqoM01UHaC+j1Y6hps97SAAAAAElFTkSuQmCC" alt="" /></p>
<p>由于代码较多，就不一一列出了，省略的都是些函数(用于绑定到事件的) 开始的tagName和template是用来填充页面的element的，每个item是放在li内，并按照既定的模版绘制。</p>
<p>events也是每个item自己的，包括了勾选，双击，点击和键盘事件，分别对应了下面的一些函数。 初始化自然不必说，这里的关键是render()。它被绑定给每个item的Model，无论该item发生什么操作，它都会发动来对该item的View进行重绘，当然数据也必然是最新的</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXUAAAAVCAIAAAA2HOlxAAAESklEQVR4nO1bMW7jMBC8b6hMwYfkAa4CfiK9AOJ+kAdcQwIu0/gHDIQA1/oBBOJC6fIC1b5ClLgklxJlmZGdW2CKgBa53NnlcLV2fnXdmUAgEErg1+Y7IBAIPxWkLwQCoRRIXwgEQimQvhAIhFKY0xddc9lG463kO2kuMnnaHx4f3v6WdqwRrNYbk3v7LN0CiKUbYR49MvmDONL6omvGKgvRwI+0qHzReX97/P3hTY9HBlw5J1rJ+01GDuuacWVmpqeYymQwbX1Llq6urVNurrR+S7m00rUSLI1rVoxVQg/jRvH4bIJB+6RR3M1qJQcrIMwnjkz+IIaEvhjFWa27sxbR3aLrQG6W5cQ3Bl4Lj9AlYV50SLCHt2SpUO2WuewS67eYSytdK8BSd+68ZG4Eiys+MGgU7/82ivMdt0Lg6wvCfGDlksEY0/rSSh6yEKz78fLw5xHg5X3MiePrUz843DCfx+f+MT9dTvvDMP3w+jkXlUjLJ6I1r7KNYLWUO7imFu7GcPeDrrmoOasYV1IEG0Csb8USvnmUOtwjjxD/fgvdhLamqEsHbrNcSkUzLgH8QVCbLEzFnBih1mOuRvkAnxq5g3ph5I7LtjOKcyXtRE9fkuqwpoTBNpZ8P7IshOui9KF3zpAfp/3hef+VfPjz+Px0PE3FYwAUu2AbF5chjRgDbBR3zkYTdc1YrbtGsIrL1sYvaWVDllDrGHW4R4CQ8J5MkzlUuwusb8tS0veoBPBIGDd8QSrOxgi17gAVwfQXADiboV705Umf0kZx0fj6MrHJFV2YRfoyTIgvosycGEeCT8OHv16fMiqX4BqpWFbqo5VkiqPJ1Lf1pB2/nr5cm6Vk4CPqcI/g3OCNHdVc9GLPsL4tS6jv/iuDPbHe4LDhS1JxLkaodfBAPGJVRjTIp1BfbJcjX18mX75mBkNM6osLQ8GcgJkxlMQYvPpiLlq5wb4bfcllCbWOUpelLxMnJ5UVeda3ZWm9vixOxbnHlusLjIKfkN77kbGLq+L1C4YZfbG7dJkUdqGHMAd16eKc6Lqo+tV11OZItZQSrsZ5gKyZ0hdfm5fpy4YsYZtHqZvVF/sSkSLZWdEiqF8yrG/LEuo7zHPYInXvRKObC1MxJ0ao9a6RNs0SxYK3Tzg90MFW8h13bKPMD3Nj6cwcNIqHPbuUvnilb3TSImNfQ/sN9uSinHh/g907G3446CdWHBVYl9o9uDZb3C1CJD9XX4biE/R3E6cxYX1DluLNo9TNe4T0MqGbY5+SSzVFHR64TVlK3RYu7V3OG9f+BxmyKBUzYzRp3Z3b1NmMp0MJiBnASrB13x/B5t15Ul/sEvj7FfLN+Q0i+yv6QrgPlkIs/t70v2TpJ6DA719ayTPrlxms+M3lN+G7z8l9snQLvN0jSz8DV/39rq6jHzScO/r/IwKBUA6kLwQCoRRIXwgEQimQvhAIhFIgfSEQCKXwD9sefk8mLfodAAAAAElFTkSuQmCC" alt="" /></p>
<p>这便是从model里取数据，setContent是填充模版。</p>
<p>&nbsp;</p>
<p><strong>最后，为了呈现完整的App，我们还需要AppView</strong></p>
<p><img class="aligncenter" src="data:image/png;base64,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" alt="" /></p>
<p>同样，暂时先放出这些代码。el是dom对象，找到这个app应该放在网页中的位置。同样也有模版和事件绑定。我们可以看到，这些事件就是和添加新的item有关了。初始化的时候，有个Todos，记得吧，这个就是那个Collection~ <em><span style="color: #808080;">fetch()</span></em>很关键，应该是从本地去读取数据存进Model里也就是有几个item就有几个Model，而且Model是可以被我们获取的，类似map。（如果是ajax的话，异步读数据也是它，至于它的内部实现，可以看Backbone的源码，我也没看过。。。）</p>
<p>然后render用来绘制界面，我们可以看到Collection的作用了，最基本的，total这个属性</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMEAAAATCAIAAACm1v7vAAAB50lEQVRoge2YwZHDIAxF04YLoBwfaWE7YIYOMtsC9LEHZl0HR6eJnLMHr42EBcaBJE5GM/+QYNmWxJNEcrpebyxWjU4v94D17mKGWLVihli1YoZYtdpkaNBCuaJnFVqORnZCdKL0sS+SU0J0QL3xDZPwqiyt3Wvg8PMZapvrR2uvn23jap6lpzPkdIdqUQ//l7yV86J2OUu4PlnmXL/8nr++fy4NU/aApK9ijxZD59iylGa8a8ujZw5aKGP6+JnIpU6aMbFH6Ha8Ry0YSocxN3ZvZWjyWaK9lejqmzJExg4Wgz1pORpZOBPJt49GLl/hi2YgvJXS+ujtToXiT0EZ375P+xlCPt2cRgURY4FOFVsMHVHYTzJ2cpMSWfKmL+tA1NtxaxGBYBKscobWt+/TQxkiC7TK3XdnaNJEEjQoZYjoEzQEYHLl0/4khnD7hfMrnmVRow4rThf0oePPMjL2MKanH1PK5bKUAMIp6jiyLry8zfw5OZXIPUowRLt0D0Nz0cC6CRMKObS2XKpBGovm9yIY6vEZSsTuw5kU2BOWMHa8l/GGJbIEx1k4+uT7EO0qPFPTDHkry8Yu/8f4iXIKFqfT5ScwKLLtEWKGPlK4jW0fvGLtOvszQ6xaMUOsWjFDrFoxQ6xa/QFKISaQZxV5gwAAAABJRU5ErkJggg==" alt="" /></p>
<p>我们得到的便是共有多少个item，然后再填到模板里，所以显示的时候，我们就可以动态地知道，现在共有item多少个，至于done和remain，自然就是完成的和没完成的，也都有计数。</p>
<p>&nbsp;</p>
<p>再来看几个函数，这个是添加功能 <img class="aligncenter" src="data:image/png;base64,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" alt="" /> <img class="aligncenter" src="data:image/png;base64,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" alt="" /></p>
<p>每次在添加todo的时候，回车添加，而内容，序号（Collection得到）等，都同时被添加到新的model（生成新的Model）里，appView会添加一个新的itemView并即使重绘显示（重绘的时候便会去新的Model里取数据了）</p>
<p>最最后，实例化这个App</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALsAAAAXCAIAAADcLKmoAAAC70lEQVRoge2YP26zMBjGew1GBh+EAzBFvsI3sCNZXKDiACxGYmTJDewiJFYOgBQG2HIC5nTA4D8YGjekCZ9c/Yb6rYP9vnn8vKYfw3CzWO7n4+U7sBwLqxiLGVYxFjOsYixmWMVYzDBUTJudPZdWr9+3ZZUmhcBB5FnPf7ZiSupFl5322mAfAB83r/5K9uPXGRHkQNxJz0EFG76XYozZUTEdhiEhoVipg/NARiQEMG34c54oEQWNYq756Zz3i2FfB27iuYmkgJJ6UZ2fEs9NPJd/qs3O3jhZmC8ER5daWWhlr00KUTE0KeSVKhAIMfYBcACYz5w2+CAraQ4lfVlGBeLmVCAQkkk6ADiADWcKBMY4E1aDfcWi+LBJ4abt6TymipK4nO3hmp+ENqR4Rkk9N4lLJoggu7LgqW6V+UKwzc7j71sLqTTYR2QsilgpZ3LjuYLaoI7+6/Of8PP51W8pZplmXwdzKaY0/zAj3phIyFuSJKCRDsN5OP2JfYQNp538WjFtdo7Loc1ocKLV7RLPX79WMWtV2wjeLrFLq+2FFHhZhQMhlmZ2Zm3wQXRpSj7qJuMZ+MuMpsZEkJKjrJgmhZPBAOCwa9Nkbwj6iNwIMrhLrSgmyC55VFcZzcs6eKZiVheSUdJmNq6Ucj6Ry6AOM4/RKYaZzZ2l2z2j0W8UR9Ephnc9KUhwiEmKcLFVpbsUM5TUi2ieXYe+jiMarElkvZQsOF595uCiK20sREIgXPjlvjtXRCgNCcFW8EF0aQ4l1bw2bpROYpeMCHIQUlrSQjFDgTSvTgUCIcJpM3QYhQiqnrRx/9Mqpq8D1rYvsZvw24lgwjy4LOXtOl0SaSVMqCLJwFcXWipGbS6TD/MLnVBHbfAZipEbE7/crGQksVNG8rmSZzr8ZUr0MxbsMGR3I4KEmfNDVBX+oJijsDTkteBReIeMOgyNPeYovEN9/6+MSPjjvyQOrRjLC7CKsZhhFWMxwyrGYoZVjMUMqxiLGd+4SwM7WsmsVwAAAABJRU5ErkJggg==" alt="" /></p>
<p>这样，一个App就诞生并可以正常使用了。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>总的来说，用<strong><span style="color: #808080;">Backbone</span></strong>来组织一个webApp还是十分清晰的，如果代码量一上去，我想效果肯定就更加明显了~ （至于HTML的LocalStorage特性，由于本人没有研究，不妄加评论，感兴趣的童鞋可以自己研究下啦~）</p>
<p>&nbsp;</p>
<p>今天的介绍就告一段落啦。。还有个实现TimeLine的，下次吧。</p>
<p> <img src='http://www.udonmai.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li><li>2010年11月10日 -- <a href="http://udonmai.com/code/gae_version.html" title="关于GAE的version问题。。。">关于GAE的version问题。。。</a></li><li>2010年05月26日 -- <a href="http://udonmai.com/code/gappproxy.html" title="傻瓜教程-教你学会使用GappProxy [转自Google文档]">傻瓜教程-教你学会使用GappProxy [转自Google文档]</a></li><li>2010年05月26日 -- <a href="http://udonmai.com/code/html%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0.html" title="HTML学习笔记">HTML学习笔记</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP内容发布</title>
		<link>http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html</link>
		<comments>http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html#comments</comments>
		<pubDate>Tue, 12 Jul 2011 10:35:22 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=28857</guid>
		<description><![CDATA[这几天接了个小网站的后台的编写工作，有一块是新闻发布，由于是非常小众长时间不会怎么发布新闻的站点，我想着就不用数据库而直接文件读写好了（其实也是为了图省事）。由此，网站的目录结构大多是我创建的用来存储数据的文件夹（文件目录多起来原来超麻烦。。） 然后做新闻发布的时候，后台添加的新闻，必定得按照发布时间的先后来排序的，最新发布的必须排在最前面，但是我们如果不作处理，php默认是按照文件名来排序（win和Linux下都是，你直接改文件夹的排序方式是没有用的），当然，如果是用数据库的话，完全没有问题，但是我的文件操作，要考虑。。。 于是很简单，几下他们的发布时间，存个变量，再排序输出就可以了。。但问题是，每次展示页面的时候都得排次序，很耗时，如果有永久的办法，就好了。。 &#60;?php $count = 0; if ($dir = opendir('added_news')){ while (false !== ($file = readdir($dir))) { $count ++; if($file != "." &#38;&#38; $file != ".."){ //echo "$file\n"; $title[$count] = $file; $title[$count] = array('text'=&#62;$file, 'updatetime'=&#62;date('YmdHi', filectime("added_news/".$file))); } } closedir($dir); } //时间：$title[$i]['updatetime']; $c = $count; for($i = 0; $i &#60; $c; $i ++) for($j = [...]]]></description>
			<content:encoded><![CDATA[<p>这几天接了个小网站的后台的编写工作，有一块是新闻发布，由于是非常小众长时间不会怎么发布新闻的站点，我想着就不用数据库而直接文件读写好了（其实也是为了图省事）。由此，网站的目录结构大多是我创建的用来存储数据的文件夹（文件目录多起来原来超麻烦。。）</p>
<p>然后做新闻发布的时候，后台添加的新闻，必定得按照发布时间的先后来排序的，最新发布的必须排在最前面，但是我们如果不作处理，php默认是按照文件名来排序（win和Linux下都是，你直接改文件夹的排序方式是没有用的），当然，如果是用数据库的话，完全没有问题，但是我的文件操作，要考虑。。。</p>
<p>于是很简单，几下他们的发布时间，存个变量，再排序输出就可以了。。但问题是，每次展示页面的时候都得排次序，很耗时，如果有永久的办法，就好了。。</p>
<pre class="brush:php"> &lt;?php
    $count = 0;
    if ($dir = opendir('added_news')){

	    while (false !== ($file = readdir($dir)))
	    {
	    	$count ++;
	    	if($file != "." &amp;&amp; $file != ".."){
	        //echo "$file\n";
	        $title[$count] = $file;
	        $title[$count] = array('text'=&gt;$file, 'updatetime'=&gt;date('YmdHi', filectime("added_news/".$file)));
	    	}
	    }

    closedir($dir);
    }

    //时间：$title[$i]['updatetime'];
    $c = $count;

    	for($i = 0; $i &lt; $c; $i ++)
    		for($j = 0; $j &lt; $c-$i-1; $j ++)
    			if($title[$j + 3]['updatetime'] &lt; $title[$j + 4]['updatetime'])
    			{
    				$tmp = $title[$j + 3];
    				$title[$j + 3] = $title[$j + 4];
    				$title[$j + 4] = $tmp;
    			}

    //timesort($title);//时间排序
    //$count = $count - 2;

      for($i = 3; $i &lt;= $count; $i ++){
      echo '&lt;li class="contentItem"&gt;
        &lt;div class="contentItemMain"&gt;
          &lt;img class="contentItemMainImg fl" src="upload_imgs/news/'.$title[$i]['text'].'/icon/'.$title[$i]['text'].'.jpg"&gt;&lt;/img&gt;
          &lt;div class="contentItemMainShow fl"&gt;
            &lt;div class="contentItemMainTop"&gt;
              &lt;div class="contentItemMainTitle fl"&gt;'.$title[$i]['text'].'&lt;/div&gt;
              &lt;div class="contentItemMainDate fl"&gt;'.date('j F Y',filectime("added_news/".$title[$i]['text'])).'&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class="contentItemMainDescription"&gt;'.nl2br(file_get_contents("added_news/".$title[$i]['text'])).'&lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="contentItemShadow"&gt;&lt;/div&gt;
      &lt;/li&gt;';}
      ?&gt;</pre>
<p>没好意思地贴了代码。。。是直接输出的html，你没看错。。。  木有mvc，一点都木有。。。  原谅我吧。。。  赶时间啊啊。。。</p>
<p>忏悔下。。。   假期如果有时间得用mvc练练手，传说的重构。。</p>
<p>哈哈 <img src='http://www.udonmai.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年06月22日 -- <a href="http://udonmai.com/code/%e4%bb%8a%e5%a4%a9%e5%a4%96%e4%b8%80%e5%88%99.html" title="今天外一则">今天外一则</a></li><li>2011年05月31日 -- <a href="http://udonmai.com/life/%e6%9c%88%e6%9c%ab%ef%bc%8c%e6%9c%aa%e5%a4%ae.html" title="月末，未央">月末，未央</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2010年12月20日 -- <a href="http://udonmai.com/works/php-portablelibrary.html" title="小制作&#8211;PortableLibrary">小制作&#8211;PortableLibrary</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>模拟post的快感与js跨域的无力</title>
		<link>http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html</link>
		<comments>http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html#comments</comments>
		<pubDate>Sun, 13 Mar 2011 10:43:41 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[javascript/jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=22179</guid>
		<description><![CDATA[自己的执行力从最近的几件事来看，完全是。。。用日语就是ぜんぜん不行。。。 先就刚完成的一个脚本来讲（后台是个还算简单的脚本，但整体的话也算是麻雀虽小，五脏俱全了&#8211;这里~~~~~~~~~~~） 先上图。。。（非商业网站，图片非原创 = =） 这个其实是个填词游戏的辅助查词工具，从表单就可以大概看出来~ 项目本身是某学长嘱托的，给了个国外的查词页面，但页面很凌乱，而且我们需要自己的。但是问题也很明显，这个查词系统和词库没那么好弄，那么怎么办呢？在把盗用数据库和自己实现算法推倒后，我们最终还是选择了比较方便的类似代理的形式，就是我们建个自己的页面（也就是这个），将参数投递到那个网站，再把结果抓回。 好了，项目大体就很清晰了。于是我和流氓有正对性地去找办法解决。其实我们也没有做过这种东西，只能去各处碰了。。。 第一个想法是用一个服务器脚本（Jsp或PHP）来填单传值，但是没怎么展开就想到第二个方案，纯JS（事后证明利弊都有。。。） 想用JS是因为起初我们对脚本操作表单确实一知半解，也没有什么容易下手的地方，然后恰好在查阅的时候看到JS自动填表提交的例子，于是一下子就心动了（诶。。。）最近其实就在看javascript和ajax来着（没怎么实践呢），于是毅然决然地做了。 这个方案初定的计划是用隐藏iframe来放国外额原始页面。然后给他参数并抓回结果。刚开始我们确实想得就是这么容易的，还准备一晚上就搞定来着。。然后我们开工。。。把form1的target指向form2，然后填完form1后，原始网页在form2里出现，结果就在那里，我们眼看就要到手了哇，这鸭子来得。。。hiahiahia（form2是个iframe） 诶！！！js操作iframe不能！！！！！怎么不能啊？？？明明这么顺理成章的事情诶。。。 “流氓”也同时抑郁了。。。 &#160; 后来再深入探讨的过程中我们发现，这个就是最典型的js跨域问题。。。囧 大囧哇。。。果然是js新手。。。所谓跨域，上图= = 所以，很明显，我真的是最最最最最最最典型的跨域了 = = 忙了一晚上，必定不甘心啊，所以我很想在之前的基础上进行补完的。。。然后经过搜索，发现一篇比较完整的索引介绍，基本罗列的大部分的解决跨域的方案。 但是事情并不顺利，一番研究后，这次的情况可行的几种解决方案都稍显麻烦（因为对js或php都没有到熟练的地步），所以很无奈地挣扎了几下，就放弃了。。。 第二天和学长说了，学长让我慢慢做，他出差去了。。。稍显安定。但是课业繁忙，抽不出时间来考虑这个。。。周六有去了次本部（陪同学上经济的辅修，有好多女生啊 T T ）下午回来之后，才开始真正去解决。。。（当时还头痛，鼻涕一把一把的） &#160; 经过反复考虑，还是回到刚开始的用脚本语言。。。（不忍心再去打扰流氓，他去本部上课多累啊，自己来吧）然后看了下，发现原网站的表单请求发送用的是POST，而之前我们做过的一个东西是GET的，即在URL里之间明文传值，那要好处理点，这次的POST，没有什么经验。。。 再经过一番搜索，恍然大悟，至少用PHP的curl扩展包，一切都是那么方便！！！（当然还可以有其他的方案类似snoopy什么的。。） curl的一大功能之一就是模拟post提交~ 先上代码~ &#60;? PHP include('simple_html_dom.php');//HTML解析扩展 $ch = curl_init(); $post_data = array ( "xxx" =&#62; $_POST["xxx"], ... ); curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_POST, 1);//开启post curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data); curl_setopt($ch, [...]]]></description>
			<content:encoded><![CDATA[<p>自己的执行力从最近的几件事来看，完全是。。。用日语就是ぜんぜん不行。。。</p>
<p>先就刚完成的一个脚本来讲（后台是个还算简单的脚本，但整体的话也算是麻雀虽小，五脏俱全了&#8211;<a href="http://1.wordscheat.sinaapp.com" target="_blank">这里~~~~~~~~~~~</a>）</p>
<p>先上图。。。（非商业网站，图片非原创 = =）<a href="http://www.udonmai.com/wp-content/uploads/2011/03/捕获.png"><img class="aligncenter size-full wp-image-22180" title="wordcheat" src="http://www.udonmai.com/wp-content/uploads/2011/03/捕获.png" alt="" width="450" height="425" /></a></p>
<p>这个其实是个填词游戏的辅助查词工具，从表单就可以大概看出来~</p>
<p>项目本身是某学长嘱托的，给了个国外的查词页面，但页面很凌乱，而且我们需要自己的。但是问题也很明显，这个查词系统和词库没那么好弄，那么怎么办呢？在把盗用数据库和自己实现算法推倒后，我们最终还是选择了比较方便的类似代理的形式，就是我们建个自己的页面（也就是这个），将参数投递到那个网站，再把结果抓回。</p>
<p>好了，项目大体就很清晰了。于是我和流氓有正对性地去找办法解决。其实我们也没有做过这种东西，只能去各处碰了。。。</p>
<p>第一个想法是用一个服务器脚本（Jsp或PHP）来填单传值，但是没怎么展开就想到第二个方案，纯JS（事后证明利弊都有。。。）</p>
<p>想用JS是因为起初我们对脚本操作表单确实一知半解，也没有什么容易下手的地方，然后恰好在查阅的时候看到JS自动填表提交的例子，于是一下子就心动了（诶。。。）最近其实就在看javascript和ajax来着（没怎么实践呢），于是毅然决然地做了。</p>
<p>这个方案初定的计划是用隐藏iframe来放国外额原始页面。然后给他参数并抓回结果。刚开始我们确实想得就是这么容易的，还准备一晚上就搞定来着。。然后我们开工。。。把form1的target指向form2，然后填完form1后，原始网页在form2里出现，结果就在那里，我们眼看就要到手了哇，这鸭子来得。。。hiahiahia（form2是个iframe）</p>
<p>诶！！！js操作iframe不能！！！！！怎么不能啊？？？明明这么顺理成章的事情诶。。。</p>
<p>“流氓”也同时抑郁了。。。</p>
<p>&nbsp;</p>
<p>后来再深入探讨的过程中我们发现，这个就是最典型的js跨域问题。。。囧</p>
<p>大囧哇。。。果然是js新手。。。所谓跨域，上图= =</p>
<p><a href="http://www.udonmai.com/wp-content/uploads/2011/03/20113413243758.jpg"><img class="size-full wp-image-22206 alignnone" title="跨域" src="http://www.udonmai.com/wp-content/uploads/2011/03/20113413243758.jpg" alt="" width="492" height="346" /></a></p>
<p>所以，很明显，我真的是最最最最最最最典型的跨域了 = = <span id="more-22179"></span></p>
<p>忙了一晚上，必定不甘心啊，所以我很想在之前的基础上进行补完的。。。然后经过搜索，发现<a href="http://www.javaeye.com/topic/897253">一篇比较完整的索引介绍</a>，基本罗列的大部分的解决跨域的方案。</p>
<p>但是事情并不顺利，一番研究后，这次的情况可行的几种解决方案都稍显麻烦（因为对js或php都没有到熟练的地步），所以很无奈地挣扎了几下，就放弃了。。。</p>
<p>第二天和学长说了，学长让我慢慢做，他出差去了。。。稍显安定。但是课业繁忙，抽不出时间来考虑这个。。。周六有去了次本部（陪同学上经济的辅修，有好多女生啊 T T ）下午回来之后，才开始真正去解决。。。（当时还头痛，鼻涕一把一把的）</p>
<p>&nbsp;</p>
<p>经过反复考虑，还是回到刚开始的用脚本语言。。。（不忍心再去打扰流氓，他去本部上课多累啊，自己来吧）然后看了下，发现原网站的表单请求发送用的是POST，而之前我们做过的一个东西是GET的，即在URL里之间明文传值，那要好处理点，这次的POST，没有什么经验。。。</p>
<p>再经过一番搜索，恍然大悟，至少用PHP的curl扩展包，一切都是那么方便！！！（当然还可以有其他的方案类似snoopy什么的。。）</p>
<p>curl的一大功能之一就是模拟post提交~</p>
<p>先上代码~</p>
<pre class="brush:php">&lt;? PHP
include('simple_html_dom.php');//HTML解析扩展

$ch = curl_init();
$post_data = array (
"xxx" =&gt; $_POST["xxx"],
		...
	);

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_POST, 1);//开启post
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//转换成字符串
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$str = curl_exec($ch);//运行
curl_close($ch);

$html = str_get_html($str);
foreach($html-&gt;find('xxx[id=xxx]') as $t)
echo $t-&gt;outertext;
?&gt;
</pre>
<p>curl的post投递是不是还算简单？他的参数类型其实有好多好多好多 = =</p>
<p>然后，然后核心部分就算完成了，解析并输出下代码，在css下，ok了。。。</p>
<p>所以，代码量很小。。</p>
<p>&nbsp;</p>
<p>不过，又经历了一次之后我也开始明白执行力的重要性。自己有时候真的是怕去做，真正着手开始，很快就可以完成，即便是庞大的项目，在学习中体会到成长的快乐，很是幸福的~</p>
<p>just do it~是不，呵呵~</p>
<p>今天，就先到这吧~~  要走的路还很长呢~ 加油啦~</p>
<p> <img src='http://www.udonmai.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月27日 -- <a href="http://udonmai.com/code/javascript%e8%b5%84%e6%ba%90%e6%b1%87%e9%9b%86%e3%80%90%e6%8c%81%e7%bb%ad%e6%9b%b4%e6%96%b0-%e6%ac%a2%e8%bf%8e%e8%a1%a5%e5%85%85%e3%80%91.html" title="Javascript资源汇集【持续更新 欢迎补充】">Javascript资源汇集【持续更新 欢迎补充】</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年06月22日 -- <a href="http://udonmai.com/code/%e4%bb%8a%e5%a4%a9%e5%a4%96%e4%b8%80%e5%88%99.html" title="今天外一则">今天外一则</a></li><li>2011年05月31日 -- <a href="http://udonmai.com/life/%e6%9c%88%e6%9c%ab%ef%bc%8c%e6%9c%aa%e5%a4%ae.html" title="月末，未央">月末，未央</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>接了个任务</title>
		<link>http://udonmai.com/code/a-task.html</link>
		<comments>http://udonmai.com/code/a-task.html#comments</comments>
		<pubDate>Wed, 26 Jan 2011 17:08:22 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=15774</guid>
		<description><![CDATA[回来几天之后突然接到了这个任务，负责做十几个静态页面，是个国际会议。 开始的时候参考了很多往年的网页，不过毕竟这个会议不是前端或设计为主题的（是也轮不到我做= =），又是静态的，所以要求其实不算很高。又因为自己之前做的很多东西拼了个框架，所以这次的任务前期写地很快。可是很快我发现，一直像以往那样不执着在每1像素的话，bug其实是那么的多，特别是在对付IE的时候。 在FF和Webkit的浏览器里，CSS3支持得已经很不错了，包括圆角和透明度。大部分浮动处理得也十分到位。但当你用IE（即便是IE8）的时候，你会发现网页一下子面目全非了。。。这是不可避免的，而自己才真正第一次认真对待这件事情= = 小细节方面处理了很多，就不一一赘述了。但重点提几个。 首先，你会发现，在FF或Chrome里body明明居中了的，无论是1024px还是宽屏，但是到IE底下，真个body是紧靠左边的，这让我很不解，明明是一样设置的。。。我真白痴，人家IE就是不一样的啊。。。 于是去找答案吧。。后来明白，传统的 margin:0 auto; 是没有你想象中的神奇功效的。。。 text-align:center; 呢？有人说用在body而不是html里，不行。。。 总之是不行就对了，而且你浮动，限定了body的width之后，向右浮动，两栏的右栏会随着浏览器的大小变动而浮动，而不是居中靠在body右边。。。所以，也许解决了居中，就解决了浮动的问题。。。 后来发现问题的关键是IE8之前，他们对浮动和定宽的识别做的很不好，如果你给中间的两栏框个容器（需要有高度），定宽，那么上述的几个小问题就都解决的。。。就是这样。。。为什么？  我也不清楚，该问MS的人。。 由于设置了定宽，就没法做流式设计了，这点上自己没有继续研究，也许交差之后。。。 总之，对付IE，任重道远 = = 最后，上一下截图吧，也算是自己的劳动成果 : ) 你可能会感兴趣这些：2011年08月3日 -- todos &#8212; Backbone案例浅析2012年01月10日 -- 不是随便想的2011年11月22日 -- CIPPUS再上线~ 2011年07月12日 -- PHP内容发布2011年04月10日 -- iphone web开发前端最基础框架2011年03月13日 -- 模拟post的快感与js跨域的无力2011年01月16日 -- 利用Twip搭建自己的TwitterAPI2010年12月31日 -- 今天是今年的最后一天啊！！！2010年11月10日 -- 关于GAE的version问题。。。2010年05月26日 -- 傻瓜教程-教你学会使用GappProxy [转自Google文档]]]></description>
			<content:encoded><![CDATA[<p>回来几天之后突然接到了这个任务，负责做十几个静态页面，是个国际会议。</p>
<p>开始的时候参考了很多往年的网页，不过毕竟这个会议不是前端或设计为主题的（是也轮不到我做= =），又是静态的，所以要求其实不算很高。又因为自己之前做的很多东西拼了个框架，所以这次的任务前期写地很快。可是很快我发现，一直像以往那样不执着在每1像素的话，bug其实是那么的多，特别是在对付IE的时候。</p>
<p>在FF和Webkit的浏览器里，CSS3支持得已经很不错了，包括圆角和透明度。大部分浮动处理得也十分到位。但当你用IE（即便是IE8）的时候，你会发现网页一下子面目全非了。。。这是不可避免的，而自己才真正第一次认真对待这件事情= =</p>
<p>小细节方面处理了很多，就不一一赘述了。但重点提几个。</p>
<p>首先，你会发现，在FF或Chrome里body明明居中了的，无论是1024px还是宽屏，但是到IE底下，真个body是紧靠左边的，这让我很不解，明明是一样设置的。。。我真白痴，人家IE就是不一样的啊。。。</p>
<p>于是去找答案吧。。后来明白，传统的</p>
<pre>margin:0 auto;</pre>
<p>是没有你想象中的神奇功效的。。。</p>
<pre>text-align:center;</pre>
<p>呢？有人说用在body而不是html里，不行。。。</p>
<p>总之是不行就对了，而且你浮动，限定了body的width之后，向右浮动，两栏的右栏会随着浏览器的大小变动而浮动，而不是居中靠在body右边。。。所以，也许解决了居中，就解决了浮动的问题。。。</p>
<p>后来发现问题的关键是IE8之前，他们对浮动和定宽的识别做的很不好，<span style="text-decoration: underline;">如果你给中间的两栏框个容器（需要有高度），定宽</span>，那么上述的几个小问题就都解决的。。。就是这样。。。为什么？  我也不清楚，该问MS的人。。</p>
<p>由于设置了定宽，就没法做流式设计了，这点上自己没有继续研究，也许交差之后。。。</p>
<p>总之，对付IE，任重道远 = =</p>
<p>最后，上一下截图吧，也算是自己的劳动成果 : )</p>
<p><a href="http://www.udonmai.com/wp-content/uploads/2011/01/IEA2.jpg"><img class="alignnone size-large wp-image-15775" title="IEA2" src="http://www.udonmai.com/wp-content/uploads/2011/01/IEA2-1024x551.jpg" alt="" width="470" height="252" /></a></p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年04月10日 -- <a href="http://udonmai.com/code/iphone-web%e5%bc%80%e5%8f%91%e5%89%8d%e7%ab%af%e6%9c%80%e5%9f%ba%e7%a1%80%e6%a1%86%e6%9e%b6.html" title="iphone web开发前端最基础框架">iphone web开发前端最基础框架</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li><li>2010年11月10日 -- <a href="http://udonmai.com/code/gae_version.html" title="关于GAE的version问题。。。">关于GAE的version问题。。。</a></li><li>2010年05月26日 -- <a href="http://udonmai.com/code/gappproxy.html" title="傻瓜教程-教你学会使用GappProxy [转自Google文档]">傻瓜教程-教你学会使用GappProxy [转自Google文档]</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/a-task.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用Twip搭建自己的TwitterAPI</title>
		<link>http://udonmai.com/code/twip-twitter_api.html</link>
		<comments>http://udonmai.com/code/twip-twitter_api.html#comments</comments>
		<pubDate>Sun, 16 Jan 2011 15:10:18 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=15282</guid>
		<description><![CDATA[装FaWave有段时间了，可是上面一直都登陆有饭否，腾讯微博，新浪微博和豆瓣，却迟迟没有推，究其原因，还是GFW。。。 一直想免去fan qiang的烦恼，又懒得买VPN或者SSL，又很久就听说自建API的事情，今天一时兴起，就决定自己弄一个吧，应该很简单。。。 后来证明确实很简单，但是自己比它还简单 = = 说一下大致过程吧~~ 算是记录下今天做的事。。。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 准备工作： 1.首先你必须要有自己的空间（GAE的请自行搜索攻略 XD）,并保证支持PHP 2.fanqiang ok （这个是关键啊） 3.Twip 本次尝试的主力，建议下载4.x 比较方便 开始实施： 1.申请一个Twitter Applications ( https://twitter.com/oauth_clients ) 我就不贴图了，注意： Application type选择Browse，以及 Callback URL应该填写你的twip地址， 例如http://xxxx.com/twip/ 前面的是你的主机。。 2.修改Twip里的config-example.php文件内容，另存为config.php文件在同一目录下。twip4.x的 config文件内容精简了许多，只有3条 define('OAUTH_KEY',''); //参考第一步，Applications申请中获取的 Consumer key define('OAUTH_SECRET',''); //参考第一步，Applications申请中获取的 Consumer secret define('BASE_URL',''); // 输入根目录地址，例如 http://xxxx.com/twip/ 一切都好了之后，上传至PHP空间。 3.之后进入你的twip，选择oauth模式~ 然后如果方框中不填，系统会自动生成~ ok（验证是要fanqiang的&#8230;） 这是成功之后~ ok，你的API地址就出现了，去随便用吧~~~~ 注意：有时候生成的地址twip和他后面的o之间是没有/的，请自行添加~ 还有，私用API还是让越少的人知道越好哦~~ 最后送上一些其他人的文章，大家共同学习~~~ YUKI.N :: [...]]]></description>
			<content:encoded><![CDATA[<p>装<a href="https://chrome.google.com/extensions/detail/aicelmgbddfgmpieedjiggifabdpcnln">FaWave</a>有段时间了，可是上面一直都登陆有饭否，腾讯微博，新浪微博和豆瓣，却迟迟没有推，究其原因，还是GFW。。。</p>
<p>一直想免去fan qiang的烦恼，又懒得买VPN或者SSL，又很久就听说自建API的事情，今天一时兴起，就决定自己弄一个吧，应该很简单。。。</p>
<p>后来证明确实很简单，但是自己比它还简单 = =</p>
<p>说一下大致过程吧~~ 算是记录下今天做的事。。。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>准备工作：</p>
<p>1.首先你必须要有自己的空间（GAE的请自行搜索攻略 XD）,并保证支持PHP</p>
<p>2.fanqiang ok （这个是关键啊）</p>
<p>3.<a href="http://code.google.com/p/twip/downloads/list">Twip</a> 本次尝试的主力，建议下载4.x 比较方便</p>
<p>开始实施：</p>
<p>1.申请一个<a href="https://twitter.com/oauth_clients" target="_blank">Twitter Applications</a> ( https://twitter.com/oauth_clients )</p>
<p>我就不贴图了，注意：</p>
<pre>Application type选择Browse，以及 Callback URL应该填写你的twip地址，</pre>
<pre>例如http://xxxx.com/twip/ 前面的是你的主机。。</pre>
<p>2.修改Twip里的config-example.php文件内容，另存为config.php文件在同一目录下。twip4.x的</p>
<p>config文件内容精简了许多，只有3条</p>
<pre>define('OAUTH_KEY',''); //参考第一步，Applications申请中获取的 Consumer key
define('OAUTH_SECRET',''); //参考第一步，Applications申请中获取的 Consumer secret
define('BASE_URL',''); // 输入根目录地址，例如 http://xxxx.com/twip/</pre>
<p>一切都好了之后，上传至PHP空间。</p>
<p>3.之后进入你的twip，选择oauth模式~</p>
<p>然后如果方框中不填，系统会自动生成~</p>
<p><a href="http://www.udonmai.com/wp-content/uploads/2011/01/twip2-300x253.jpg"><img class="alignnone size-full wp-image-15339" title="twip1" src="http://www.udonmai.com/wp-content/uploads/2011/01/twip2-300x253.jpg" alt="" width="300" height="253" /></a></p>
<p>ok（验证是要fanqiang的&#8230;）</p>
<p>这是成功之后~<span id="more-15282"></span></p>
<p><a href="http://www.udonmai.com/wp-content/uploads/2011/01/twip4-300x290.jpg"><img class="alignnone size-full wp-image-15341" title="twip2" src="http://www.udonmai.com/wp-content/uploads/2011/01/twip4-300x290.jpg" alt="" width="300" height="290" /></a></p>
<p>ok，你的API地址就出现了，去随便用吧~~~~</p>
<p>注意：有时候生成的地址twip和他后面的o之间是没有/的，请自行添加~</p>
<p>还有，私用API还是让越少的人知道越好哦~~</p>
<p>最后送上一些其他人的文章，大家共同学习~~~</p>
<p style="padding-left: 30px;"><a href="http://b123400.net/blog/entry/Twip-OAuth-%E7%9A%84%E5%95%8F%E9%A1%8C" target="_blank"><span style="color: #3366ff;">YUKI.N :: Twip + OAuth 的問題 </span></a></p>
<p style="padding-left: 30px;"><span style="color: #0071bb;"><a href="http://yegle.net/2009/09/02/twip%E6%B7%BB%E5%8A%A0oauth%E6%94%AF%E6%8C%81/" target="_blank"><span style="color: #3366ff;">Twip添加OAuth支持</span></a></span></p>
<p style="padding-left: 30px;"><span style="color: #0071bb;"><span style="color: #0071bb;"><span style="color: #0071bb;"><a href="http://www.lunarch.info/?p=8001" target="_blank"><span style="color: #3366ff;">Twip搭建 twitter API proxy指南</span></a></span></span></span></p>
<p style="padding-left: 30px;"><span style="color: #0071bb;"><span style="color: #0071bb;"><span style="color: #0071bb;"><br />
</span></span></span></p>
<p><span style="color: #0071bb;"><span style="color: #0071bb;"><span style="color: #0071bb;"><span style="color: #000000;">祝大家都能用上属于自己的TwitterAPI~~</span></span></span></span></p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年06月22日 -- <a href="http://udonmai.com/code/%e4%bb%8a%e5%a4%a9%e5%a4%96%e4%b8%80%e5%88%99.html" title="今天外一则">今天外一则</a></li><li>2011年05月31日 -- <a href="http://udonmai.com/life/%e6%9c%88%e6%9c%ab%ef%bc%8c%e6%9c%aa%e5%a4%ae.html" title="月末，未央">月末，未央</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2010年12月20日 -- <a href="http://udonmai.com/works/php-portablelibrary.html" title="小制作&#8211;PortableLibrary">小制作&#8211;PortableLibrary</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/twip-twitter_api.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今天是今年的最后一天啊！！！</title>
		<link>http://udonmai.com/life/the-_last_day.html</link>
		<comments>http://udonmai.com/life/the-_last_day.html#comments</comments>
		<pubDate>Fri, 31 Dec 2010 02:11:42 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[平静的日子]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[新年]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=14693</guid>
		<description><![CDATA[一晃今天竟然已经是公历12月31日了！！ 觉得如果不拿出时间来记录下真是惭愧啊。。。 其实最近发生的事有很多，之前也有过总结，所以范围缩小我也可以理清头绪。 大约可以从打酱油的数模获奖开始讲。。。 稀里糊涂地就获奖了，没有枉费3天不规律的生活算是真的。。。记得实在一节马哲课上用手机查的，然后本来就不听的课变得更加飘渺了。。。然后那时候和松哥的Android词典好像是做好了来着（拖控件会吧哈哈）。。。 其实那属于一个阶段，是各头奔波的阶段，手机软件，6舍，创新项目，虽然自己其实没怎么学到东西 = =（Android控件一览。。。python基本语法和Google maps API 以及JS的一点点基本语法），只是所谓的忙，没有什么实质的进步让我很无奈。 之后慢慢地科技文化节来了，准备参加的有那么几个比赛，web开发应用大赛因为是自己组的比赛是肯定要参加的。还有网页设计和网站模式设计等等。。。 还依稀记得那天上万马哲（又是马哲）我们3个人讨论做的东西，我自己其实是最兴奋的 = = 写了潦草的说明和图例，似乎就算是启动的。。。无奈那时候还有每周两题的数据结构上机题，我们自己的东西只能放在周末的一天甚至不到一天。 截止日期是12·16，及得我们是一个月之前就开始的，然后，结果，我们是花了大约3天做的。。。时间确实可以挤出来的。。。效率确实可以有的。。。这个其实就是我们的web应用大赛的作品，也就是那个Portablelibrary哈~（最后得了点奖算是鼓励吧） 之前那些东西慢慢的也就不怎么动了，因为要期末考了。期间和研究生学长出去吃了顿饭，谈了点事，做了几个网页，下学期再加油吧。。说道网页，自己的网页设计大赛没有参加，也没有去看别人的做的怎么样，反正自己的肯定是纯代码写的，感觉还要用到jQuery什么的，但是自己现在在想用1天做一个网页而且是用自己没碰过的技术，感觉有点吃力就很决绝的放弃了。。。对自己要求太高了吧= = 那些参赛作品到后来让我觉得自己随便手写个似乎就足够了 = = 再有是那个网站设计模式，花了半天写了个文档，在截止的前3分钟上交，然后也获奖了。。。其实是作品本来就少吧 = = 两个作品的ppt都是自己做的，辛亏有下的1G的模版hohohohoho&#8217;~~ 颁奖没去，让学弟代领（数据结构上机啊 = =） 证书两张，即便是院级的也很开心。 忘了之前的很莫名的奖学金证书也来了 = =（好吧，这次这个无视好了，600块倒是不错的哈哈） 然后，然后就是结课了，复习了，要考试了。。。可是。。。 数据结构上机考那天，我背着电脑，在大雪过后，滑倒在了学苑桥 = = 考试回来很开心地开机才发现有近1/4的屏幕白屏，裂纹很清晰诶。。。 好吧，大难不死，你们懂得。。。 还可以用，凑合着就等到考完事滚回家修了吧，心态还是不错的。。。 现在是复习&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-加油！！！！！ 再来说说学校之外的，记得是11·25吧，饭否复活了！！！！！！！哈哈 你们懂得。 然后是结识了很多人，然后是豆瓣的阿尔法城。。。人人开始不怎么上了。。。 特别是今天早上收到junyu前辈的回信和我昨天看的程序员杂志，让我更加认定了自己道路！ 一往无前。 复习先吧= = 哈哈 加油~~ （全文没有逻辑，忽略= =） 你可能会感兴趣这些：2011年07月12日 -- PHP内容发布2011年03月13日 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.udonmai.com/wp-content/uploads/2010/12/4350399621_439e6689c4_b_d.jpg"><img class="size-medium wp-image-14696 alignleft" title="sky" src="http://www.udonmai.com/wp-content/uploads/2010/12/4350399621_439e6689c4_b_d-300x171.jpg" alt="" width="300" height="171" /></a></p>
<p>一晃今天竟然已经是公历12月31日了！！</p>
<p>觉得如果不拿出时间来记录下真是惭愧啊。。。</p>
<p>其实最近发生的事有很多，之前也有过总结，所以范围缩小我也可以理清头绪。</p>
<p>大约可以从打酱油的数模获奖开始讲。。。</p>
<p>稀里糊涂地就获奖了，没有枉费3天不规律的生活算是真的。。。记得实在一节马哲课上用手机查的，然后本来就不听的课变得更加飘渺了。。。然后那时候和松哥的Android词典好像是做好了来着（拖控件会吧哈哈）。。。</p>
<p>其实那属于一个阶段，是各头奔波的阶段，手机软件，6舍，创新项目，虽然自己其实没怎么学到东西 = =（Android控件一览。。。python基本语法和Google maps API 以及JS的一点点基本语法），只是所谓的忙，没有什么实质的进步让我很无奈。</p>
<p>之后慢慢地科技文化节来了，准备参加的有那么几个比赛，web开发应用大赛因为是自己组的比赛是肯定要参加的。还有网页设计和网站模式设计等等。。。</p>
<p>还依稀记得那天上万马哲（又是马哲）我们3个人讨论做的东西，我自己其实是最兴奋的 = = 写了潦草的说明和图例，似乎就算是启动的。。。无奈那时候还有每周两题的数据结构上机题，我们自己的东西只能放在周末的一天甚至不到一天。</p>
<p>截止日期是12·16<span id="more-14693"></span>，及得我们是一个月之前就开始的，然后，结果，我们是花了大约3天做的。。。时间确实可以挤出来的。。。效率确实可以有的。。。这个其实就是我们的web应用大赛的作品，也就是那个Portablelibrary哈~（最后得了点奖算是鼓励吧）</p>
<p>之前那些东西慢慢的也就不怎么动了，因为要期末考了。期间和研究生学长出去吃了顿饭，谈了点事，做了几个网页，下学期再加油吧。。说道网页，自己的网页设计大赛没有参加，也没有去看别人的做的怎么样，反正自己的肯定是纯代码写的，感觉还要用到jQuery什么的，但是自己现在在想用1天做一个网页而且是用自己没碰过的技术，感觉有点吃力就很决绝的放弃了。。。对自己要求太高了吧= = 那些参赛作品到后来让我觉得自己随便手写个似乎就足够了 = =</p>
<p>再有是那个网站设计模式，花了半天写了个文档，在截止的前3分钟上交，然后也获奖了。。。其实是作品本来就少吧 = =</p>
<p>两个作品的ppt都是自己做的，辛亏有下的1G的模版hohohohoho&#8217;~~</p>
<p>颁奖没去，让学弟代领（数据结构上机啊 = =）</p>
<p>证书两张，即便是院级的也很开心。</p>
<p>忘了之前的很莫名的奖学金证书也来了 = =（好吧，这次这个无视好了，600块倒是不错的哈哈）</p>
<p>然后，然后就是结课了，复习了，要考试了。。。可是。。。</p>
<p>数据结构上机考那天，我背着电脑，在大雪过后，滑倒在了学苑桥 = =</p>
<p>考试回来很开心地开机才发现有近1/4的屏幕白屏，裂纹很清晰诶。。。</p>
<p>好吧，大难不死，你们懂得。。。</p>
<p>还可以用，凑合着就等到考完事滚回家修了吧，心态还是不错的。。。</p>
<p>现在是复习&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-加油！！！！！</p>
<p>再来说说学校之外的，记得是11·25吧，<a href="http://fanfou.com/udonmai">饭否</a>复活了！！！！！！！哈哈 你们懂得。</p>
<p>然后是结识了很多人，然后是豆瓣的阿尔法城。。。人人开始不怎么上了。。。</p>
<p>特别是今天早上收到junyu前辈的回信和我昨天看的程序员杂志，让我更加认定了自己道路！</p>
<p>一往无前。</p>
<p>复习先吧= = 哈哈 加油~~</p>
<p>（全文没有逻辑，忽略= =）</p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年06月22日 -- <a href="http://udonmai.com/code/%e4%bb%8a%e5%a4%a9%e5%a4%96%e4%b8%80%e5%88%99.html" title="今天外一则">今天外一则</a></li><li>2011年05月31日 -- <a href="http://udonmai.com/life/%e6%9c%88%e6%9c%ab%ef%bc%8c%e6%9c%aa%e5%a4%ae.html" title="月末，未央">月末，未央</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/life/winter-plan1.html" title="寒假自我监督事宜&#8211;规划和展望">寒假自我监督事宜&#8211;规划和展望</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/life/the-_last_day.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>关于GAE的version问题。。。</title>
		<link>http://udonmai.com/code/gae_version.html</link>
		<comments>http://udonmai.com/code/gae_version.html#comments</comments>
		<pubDate>Wed, 10 Nov 2010 13:41:10 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://udonmai.com/?p=4664</guid>
		<description><![CDATA[这次开始捣鼓的是GAE和Python。以前用它搭过傻瓜的GAppProxy来FQ。。。可是这次是自己在有一定的编程认识之后的再次尝试，而且分配的任务是搭建一个基本的数据存储服务。虽然是学长带，不过一些最基本的东西，还得自己来。 一开始是上传了一个Python的标准输出&#8217;helloworld&#8217;。通过udonmai.appspot.com即可显示（已失效）。之后便是上传学长给的数据存储的代码。不过事情并不一帆风顺。上传失败n次之后，才发现一些和yaml有关的细节： GAE允许在服务器服务器上保存站点的多个版本，包括程序、模版、静态文件等。它是通过对app.yaml的version的设置进行版本的管理。 如默认情况下version=1，此时对站点内所有文件的修改，上传后都将更新到1这个版本里。如果你修改了这个数字，再次更新时，GAE将自动创建一个 新的版本。 需要注意的是，创建新版本后，如果需要新版本生效，成为当前版本，必须进入站点控制面板进行设置。即进入：Administration-&#62;Version界面，选择需要的版本，点击“Make Default”按钮，选中的版本将成为站点的当前版本。 我之前对这个version理解不清楚，不知道什么时候修改了version值。随后我在站点里添加了几个图片文件，更新之后，由于没有执行这个选择版本的操作，图片死活显示不出来，真是郁闷之极。 另外如果你的站点里存在不需要的垃圾文件，也可以通过这个方式来清除。先将本地的垃圾文件删除，然后修改version，执行update，选择新版本，再将老版本删除即可。 有趣的是，这个version的值不只是能增加，还能减小，比如你从4修改为3，服务器上会在版本4的前面增加一个版本号为3的版本。另外版本号只能为大于-1的整数，如果你想搞个*.*.*这样的版本，update将直接罢工：）（经过搜索得到的经验之谈） 虽然更改了default，结果竟然直接404了，对此我很是无奈。。。继续捣鼓吧。。。加油！ 此文就到此为止吧。。。 你可能会感兴趣这些：2010年05月26日 -- 傻瓜教程-教你学会使用GappProxy [转自Google文档]2012年01月10日 -- 不是随便想的2011年11月22日 -- CIPPUS再上线~ 2011年08月3日 -- todos &#8212; Backbone案例浅析2011年07月12日 -- PHP内容发布2011年06月22日 -- 今天外一则2011年03月13日 -- 模拟post的快感与js跨域的无力2011年01月27日 -- 接了个任务2011年01月16日 -- 利用Twip搭建自己的TwitterAPI2010年12月31日 -- 今天是今年的最后一天啊！！！]]></description>
			<content:encoded><![CDATA[<p>这次开始捣鼓的是GAE和Python。以前用它搭过傻瓜的GAppProxy来FQ。。。可是这次是自己在有一定的编程认识之后的再次尝试，而且分配的任务是搭建一个基本的数据存储服务。虽然是学长带，不过一些最基本的东西，还得自己来。</p>
<p>一开始是上传了一个Python的标准输出&#8217;helloworld&#8217;。通过udonmai.appspot.com即可显示（已失效）。之后便是上传学长给的数据存储的代码。不过事情并不一帆风顺。上传失败n次之后，才发现一些和yaml有关的细节：</p>
<div style="padding-left: 30px;">GAE允许在服务器服务器上保存站点的多个版本，包括程序、模版、静态文件等。它是通过对app.yaml的version的设置进行版本的管理。 如默认情况下version=1，此时对站点内所有文件的修改，上传后都将更新到1这个版本里。如果你修改了这个数字，再次更新时，GAE将自动创建一个 新的版本。</div>
<div style="padding-left: 30px;">需要注意的是，创建新版本后，如果需要新版本生效，成为当前版本，必须进入站点控制面板进行设置。即进入：Administration-&gt;Version界面，选择需要的版本，点击“Make Default”按钮，选中的版本将成为站点的当前版本。</div>
<div style="padding-left: 30px;">我之前对这个version理解不清楚，不知道什么时候修改了version值。随后我在站点里添加了几个图片文件，更新之后，由于没有执行这个选择版本的操作，图片死活显示不出来，真是郁闷之极。</div>
<div style="padding-left: 30px;">另外如果你的站点里存在不需要的垃圾文件，也可以通过这个方式来清除。先将本地的垃圾文件删除，然后修改version，执行update，选择新版本，再将老版本删除即可。</div>
<div style="padding-left: 30px;">有趣的是，这个version的值不只是能增加，还能减小，比如你从4修改为3，服务器上会在版本4的前面增加一个版本号为3的版本。另外版本号只能为大于-1的整数，如果你想搞个*.*.*这样的版本，update将直接罢工：）（经过搜索得到的经验之谈）</div>
<p>虽然更改了default，结果竟然直接404了，对此我很是无奈。。。继续捣鼓吧。。。加油！</p>
<div>此文就到此为止吧。。。</div>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2010年05月26日 -- <a href="http://udonmai.com/code/gappproxy.html" title="傻瓜教程-教你学会使用GappProxy [转自Google文档]">傻瓜教程-教你学会使用GappProxy [转自Google文档]</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年06月22日 -- <a href="http://udonmai.com/code/%e4%bb%8a%e5%a4%a9%e5%a4%96%e4%b8%80%e5%88%99.html" title="今天外一则">今天外一则</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li><li>2010年12月31日 -- <a href="http://udonmai.com/life/the-_last_day.html" title="今天是今年的最后一天啊！！！">今天是今年的最后一天啊！！！</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/gae_version.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>傻瓜教程-教你学会使用GappProxy [转自Google文档]</title>
		<link>http://udonmai.com/code/gappproxy.html</link>
		<comments>http://udonmai.com/code/gappproxy.html#comments</comments>
		<pubDate>Wed, 26 May 2010 10:42:50 +0000</pubDate>
		<dc:creator>udonmai'</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[GappProxy]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[翻墙]]></category>

		<guid isPermaLink="false">http://www.udonmai.com/?p=186</guid>
		<description><![CDATA[Gappproxy的来龙去脉： Gappproxy &#8211; 用来搭建你自己的代理服务器。 源代码：SVN: http://gappproxy.googlecode.com/svn/trunk 如果对开发有兴趣的可以从以上位置下载源代码，下载需使用svn的客户端，Windows用户请使用Tortoise SVN，Linux用户自己找，反正 Google 一搜就全有了。 主页：http://gappproxy.googlecode.com，目前已经不可以直接访问，需要用代理。 Wiki: http://code.google.com/p/gappproxy/wiki 此版本已经解决 cookie 和 youtube 视频播放等问题。 对于普通仅想使用下代理功能的，请看这里(适用与Windows用户)： GappProxy是基于Google AppEngine平台开发的软件，使用的语言是Python，所以你想要正确运行并配置该软件，需要满足下面几个要求： 拥有至少一个 Google 的账户，通常你的 Gooogle 邮箱便是。如果你说你还没有开始使用Gmail，那还真是杯具。 开通 Google AppEngine，注册地址在这里：http://appengine.google.com/。中文帮助在这里：http://code.google.com/intl/zh-CN/appengine/。 下载 Google AppEngine SDK，下载地址（Windows）：http://googleappengine.googlecode.com/files/GoogleAppEngine_1.3.1.msi。其他平台点这里。 下载 Python 语言开发环境，Python 2.6 下载地址（Windows）：http://www.python.org/ftp/python/2.6.4/python-2.6.4.msi 下载 Gappproxy 程序，包括服务器端 (fectch server) 和客户端 (Gappproxy client)，各自下载点这里和这里。 懂一点点英文，因为目前 Google AppEngine 的页面是纯英文。如果真有哪位兄弟有障碍，请你自行使用 Google Translate（Google 翻译）。 环境搭建 &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Gappproxy的来龙去脉：</strong></p>
<div>Gappproxy &#8211; 用来搭建你自己的代理服务器。</div>
<div><strong>源代码：</strong>SVN: <a href="http://gappproxy.googlecode.com/svn/trunk">http://gappproxy.googlecode.com/svn/trunk</a></div>
<div>如果对开发有兴趣的可以从以上位置下载源代码，下载需使用svn的客户端，Windows用户请使用Tortoise SVN，Linux用户自己找，反正 Google 一搜就全有了。</div>
<div><strong>主页：</strong><a href="http://gappproxy.googlecode.com/">http://gappproxy.googlecode.com</a>，目前已经不可以直接访问，需要用代理。</div>
<div><strong>Wiki:</strong> <a href="http://code.google.com/p/gappproxy/wiki">http://code.google.com/p/gappproxy/wiki</a></div>
<div></div>
<div>此版本已经解决 cookie 和 youtube 视频播放等问题。</div>
<div>对于普通仅想使用下代理功能的，请看这里(适用与Windows用户)：<span id="more-186"></span></div>
<h4>GappProxy是基于Google AppEngine平台开发的软件，使用的语言是Python，所以你想要正确运行并配置该软件，需要满足下面几个要求：</h4>
<ol>
<li>
<div>拥有至少一个 <strong>Google</strong> 的账户，通常你的 Gooogle 邮箱便是。如果你说你还没有开始使用Gmail，那还真是杯具。</div>
</li>
<li>
<div>开通 <strong>Google AppEngine</strong>，注册地址在这里：http://<a href="http://appengine.google.com/"><span style="color: #800080;">appengine.google.com/</span></a>。中文帮助在这里：<a href="http://code.google.com/intl/zh-CN/appengine/"><span style="color: #800080;">http://code.google.com/intl/zh-CN/appengine/</span></a>。</div>
</li>
<li>
<div>下载 <strong>Google AppEngine SDK</strong>，下载地址（Windows）：<a href="http://googleappengine.googlecode.com/files/GoogleAppEngine_1.3.1.msi">http://googleappengine.googlecode.com/files/GoogleAppEngine_1.3.1.msi</a>。<a id="hpiz" title="Google AppEngine SDK 下载" href="http://code.google.com/intl/zh-CN/appengine/downloads.html">其他平台点这里</a>。</div>
</li>
<li>
<div>下载 <strong>Python</strong> 语言开发环境，Python 2.6 下载地址（Windows）：<a href="http://www.python.org/ftp/python/2.6.4/python-2.6.4.msi">http://www.python.org/ftp/python/2.6.4/python-2.6.4.msi</a></div>
</li>
<li>
<div>下载 Gappproxy 程序，包括服务器端 (fectch server) 和客户端 (Gappproxy client)，各自下载点<a id="qoag" title="fetch server 下载" href="http://d.namipan.com/d/93a4eb9c12210ef7eb2c9351ddb42eb9c3d43fb876190000">这里</a>和<a id="eim:" title="Gappproxy 下载" href="http://d.namipan.com/d/6071f723c5b23816b3a8a6d277ee89bfe0436ffcf7630000">这里</a>。</div>
</li>
<li>
<div>懂一点点英文，因为目前 Google AppEngine 的页面是纯英文。如果真有哪位兄弟有障碍，请你自行使用 Google Translate（Google 翻译）。</div>
<div></div>
</li>
</ol>
<h4>环境搭建 &#8211; 如果上面你都已经具备了，下面正式开始，我们一步一步 (step by step) 来：</h4>
<ol>
<li>
<div>登录进你的 Google AppEngine，创建一个应用程序 (Application) 并命一个你<a name="喜欢的名字"></a>喜欢的<strong>名字</strong>(记住这个名字，以后有用)。具体不再赘述，比你开通一个QQ号还简单。</div>
</li>
<li>
<div>安装 Google AppEngine SDK，默认安装即可。记住安装地址后面会用到。</div>
</li>
<li>
<div>安装 Python 开发环境，默认安装即可。</div>
</li>
</ol>
<h4>上传代码 &#8211; 如果环境搭建成功，需要配置服务器端代码</h4>
<ol>
<li>
<div>解压之前下载的fectch sever服务器端程序到你的 Google AppEngine SDK 安装目录下：.\Google\google_appengine\fetchserver_sever</div>
</li>
<li>
<div>用记事本或者其他文本编辑器打开 <strong>fetch sever目录下的 app.yaml</strong> 文件，将 application: <span style="text-decoration: underline;">your application name </span>中的your application name 替换为你在 AppEngine 创建的<a id="o1oa" title="你的应用程序名字" href="http://docs.google.com/View?id=dd5623sf_15hqtjjfd9#喜欢的名字" target="_self">应用程序的名字</a>。</div>
<div id="tgg4" style="text-align: left;"><img style="width: 429px; height: 210px;" src="http://docs.google.com/File?id=dd5623sf_17g9jdbtcz_b" alt="" /></div>
</li>
<li>
<div>打开命令行窗口，进入Google AppEngine SDK的安装路径下，运行如下命令：appcfg.py update fetchserver_server。上传前需要输入 Google 账户用来验证，按提示输入用户名和密码即可。</div>
<div id="eewo" style="text-align: left;"><img src="http://docs.google.com/File?id=dd5623sf_18dpb3dvc9_b" alt="" width="532" height="77" /></div>
</li>
<li>
<div>成功上传后，服务器端配置既大功告成。</div>
</li>
</ol>
<h4>客户端配置</h4>
<ol>
<li>
<div>解压之前下载的 gappproxy_client.zip 到任意目录，进入gappproxy_client\localproxy, 用记事本或者其他文本编辑器打开 proxy.conf 文件，将#fetch_server = <a href="http://yourapplicationname.appspot.com/fetch.py">http://yourapplicationname.appspot.com/fetch.py</a> 替换为你自己的程序网址，将<span style="color: #0066cc;"><span style="text-decoration: underline;">yourapplicationname </span></span>换为<a id="ydgp" title="你创建的应用程序名字" href="http://docs.google.com/View?id=dd5623sf_15hqtjjfd9#喜欢的名字" target="_self">你创建的应用程序名字</a>并将前面的 # 号去掉，保存即可。</div>
<div id="gy.2" style="text-align: left;"><img src="http://docs.google.com/File?id=dd5623sf_19hsq77ddv_b" alt="" width="474" height="189" /></div>
</li>
<li>
<div>启动代理，双击运行 proxy.py 即可。在gappproxy_client\localproxy目录下。</div>
</li>
</ol>
<h4>浏览器配置 &#8211; 配置 IE 浏览器使用代理设置。</h4>
<p>进入Internet 选项-&gt;连接-&gt;局域网设置，配置如下：</p>
<div id="jxtp" style="text-align: left;"><img style="width: 424px; height: auto;" src="http://docs.google.com/File?id=dd5623sf_20fcwmw5ch_b" alt="" /></div>
<div style="text-align: left;"></div>
<div style="text-align: left;">点击确定后，保存设置。</div>
<div style="text-align: left;"></div>
<div style="text-align: left;"><strong>结语：一切搞定，你可以自由冲浪了，请不要访问敏感信息，保护我们这来之不易的自由。</strong></div>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>转者注：使用它速度绝对可以，但目前仅能提供浏览网页的基本功能，对于视频播放和用户数据登录等如HTTPS的接入方式则无能为力，譬如你需要用facebook货Twitter，你会很失望，因为登陆不能，后续版本应该会解决这种问题。</p>
<div  class="related_post_title">你可能会感兴趣这些：</div><ul class="related_post"><li>2010年11月10日 -- <a href="http://udonmai.com/code/gae_version.html" title="关于GAE的version问题。。。">关于GAE的version问题。。。</a></li><li>2010年02月14日 -- <a href="http://udonmai.com/others/web_achieves/tor_world.html" title="洋葱加狐狸，游遍全球">洋葱加狐狸，游遍全球</a></li><li>2012年01月10日 -- <a href="http://udonmai.com/life/%e4%b8%8d%e6%98%af%e9%9a%8f%e4%be%bf%e6%83%b3%e7%9a%84.html" title="不是随便想的">不是随便想的</a></li><li>2011年11月22日 -- <a href="http://udonmai.com/life/cippus%e5%86%8d%e4%b8%8a%e7%ba%bf.html" title="CIPPUS再上线~ ">CIPPUS再上线~ </a></li><li>2011年08月3日 -- <a href="http://udonmai.com/code/todos-backbone%e6%a1%88%e4%be%8b%e6%b5%85%e6%9e%90.html" title="todos &#8212; Backbone案例浅析">todos &#8212; Backbone案例浅析</a></li><li>2011年07月12日 -- <a href="http://udonmai.com/code/php%e5%86%85%e5%ae%b9%e5%8f%91%e5%b8%83.html" title="PHP内容发布">PHP内容发布</a></li><li>2011年06月22日 -- <a href="http://udonmai.com/code/%e4%bb%8a%e5%a4%a9%e5%a4%96%e4%b8%80%e5%88%99.html" title="今天外一则">今天外一则</a></li><li>2011年03月13日 -- <a href="http://udonmai.com/code/%e6%a8%a1%e6%8b%9fpost%e7%9a%84%e5%bf%ab%e6%84%9f%e4%b8%8ejs%e8%b7%a8%e5%9f%9f%e7%9a%84%e6%97%a0%e5%8a%9b.html" title="模拟post的快感与js跨域的无力">模拟post的快感与js跨域的无力</a></li><li>2011年01月27日 -- <a href="http://udonmai.com/code/a-task.html" title="接了个任务">接了个任务</a></li><li>2011年01月16日 -- <a href="http://udonmai.com/code/twip-twitter_api.html" title="利用Twip搭建自己的TwitterAPI">利用Twip搭建自己的TwitterAPI</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://udonmai.com/code/gappproxy.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

