#BackboneConf2012 Migrating a Large Project to Backbone.js by Sam Clay

Backbone Conf 2012

有幸去美国波士顿参加了2012年的 Backbone.js Conference,见到了coffeescriptunderscore.js 还有 backbone.js 的作者 Jeremy Ashkenas。会议内容围绕前端MVWTF和社区进行了很多有趣的讨论,有很多有价值的观点。我希望在这里面与大家分享我从里面学到的东西。

这系列博客其实是我整理的会议笔记的汇总,是我对每个话题中比较有印象或者比较重要的内容的摘抄,这些观点几乎都不是我的,我仅作为一个传声者。我是希望把所有的Credit交给演讲者自己,我最多只是一个翻译者,碰巧幸运的在现场。Backbone.js Conference和O’Reilly的Fluent Conference 碰巧同时进行,#BackboneConf 更加草根,但是也更有观点。

Migrating a Large Project to Backbone.js by Sam Clay

Sam Clay

Links

Notes

Sam Clay是Jeremy的同事,是DocumentCloud的前雇员。
他的项目叫NewsBlur,是一个开源的Web版RSS阅读器。他展示了一些不错的工具,展示了一个阅读器上面的UI Widget是如何映射到Backbone View的。他正在把这个“遗留”项目用Backbone.js重写。

他描述了如何在不Break原来代码的情况下渐进的讲一个非Backbone项目用Backbone重构。

迁移routers。将所有和url打交道的部分用router管理起来,可以有多个router。
迁移Model。可能需要对服务器api做versioning(就是?v2返回不同的结果)。迁移代码的时候可以将model.attributes未改写的方法,这样迁移比较平滑。使用{silent: yes}初始化,手动触发model的change方法。
迁移Views。主要的改变是讲event binding改为event delegating。作者比较喜欢将View拆成粒度比较细的sub views,里面比较有趣的是提到了View collections的概念。

作者提醒这个错误很常见:

TypeError: ‘undefined’ is not an object (evaluating ‘func.bind’)

这个东西是由于想要绑定一个不存在的方法……(如_.bindAll)

另外一个得到共鸣的问题是ghost view的问题,也就是绑定了方法的view的element被删除或者被复用后,原先绑定的方法会带来不可知的影响。这个也是Backbone.js目前正在努力解决的地方,增加View的生命周期管理能力(destroy method)。

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.