国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用Backbone構建精美應用的7條建議

2019-11-14 20:31:56
字體:
來源:轉載
供稿:網友

  我們在Bizzabo使用Backbone.js已經有兩年的時間了。我們從一個小的網頁應用為開始,這些小應用是由Backbone驅動的,而且他們看上去非常友好。

  Backbone天生就不固執己見。你從文檔上獲取的一個最基本觀點是:使用backbone.js提供的工具,做任何你想做的事。

  這點非常好,因為有這么多不同的應用場合,而且對于開始寫app來說也非常容易。這種途徑可能避免我們在剛開始時犯盡可能少的錯誤。

  當一件事做錯的時錯,我們要發現并找到改正的方法。

  下面這些提示,可以讓你避免我們在進行Backbone.js開發時所碰到錯誤:

  1. 視圖(Views)是數據無關的(Data-Less)

  數據屬于模型(models)不是視圖。下次你發現 你在一個視圖中存儲數據(或者更糟:在DOM里),馬上把它移到model里。

  如果你沒有model,創建一個非常簡單:

this.viewState = new Backbone.Model();

  真的不需要任何其它操作。

  你可以在你的數據上偵聽改變事件,甚至跟你的服務器在線同步。

  2. DOM事件只改變models

  當一個DOM事件觸發時,比如點擊了一個按鈕,不要讓它改變view本身。改變這個model.

  改變DOM且不改變狀態意味著你的狀態還存儲在DOM中。這條規則可以讓你保持狀態一致。

  如果點擊了一個“加載更多”邊接,不要展開視圖,只需要改變model:

  this.viewState.set('readMore', true);

  好了,但是視圖何時發生改變?好問題,下一條規則會回答。

  3.DOM只有在model發生改變時才改變

  事件是很神奇的,請使用他們。最簡單的方法是每次改變后觸發一遍。

this.listenTo(this.stateModel, 'change', this.render);

  更好的方法是只有在需要的時侯觸發改變。

this.listenTo(this.stateModel, 'change:readMore', this.renderReadMore);

  這個視圖會一直同他的model保持一致。無論model是如何改變的:從命令接口或調試信息處響應動作,這個視圖會一直保持更新。

  4. 綁定的東西必須解綁

  當視圖從DOM上移除時,使用'remove'方法,它必須從所有綁定的事件上解綁上。

  如果你使用'on'綁定,你的職責是使用'off'去解綁。如果沒有解綁,內存回收器無法釋放內存,從而造成你應用的性能下降。

  這就是'listenTo'的由來。它會跟蹤視圖的綁定和解綁。Backbone把這個從DOM移動之前,會進行'stopListening'。

// Ok:this.stateModel.on('change:readMore', this.renderReadMore, this); // 神奇:this.listenTo(this.stateModel, 'change:readMore', this.renderReadMore);

  5. 保持鏈式寫法

  從render和remove方法里,總是返回'this'。這樣可以讓你寫方法鏈。

view.render().$el.appendTo(otherElement);

  這很方法,不要打破它。

  6. 事件比回調要好

  等待響應事件比回調要好

  Backbone模型(models)默認會觸發'sync'和'error'事件,因此可以使用這些事件代替回調。考慮一下這兩種情況。

model.fetch({  success: handleSuccess,  error: handleError});//這種更好:view.listenTo(model, 'sync', handleSuccess);view.listenTo(model, 'error', handleError);model.fetch();

  model何時填充(fetched)并不重要,handleSucess/handleError會被調用。

  7. Views是有作用域的

  視圖永遠不要操作除了它本身以外的DOM。

  view會引用它自己的DOM元素,如'el'或者jquery對象'$el'

  那意味著你永遠不要直接使用jQuery:

  $('.text').html('Thank you');

  請把DOM元素的選擇限定到你自己的域里面:

this.$('.text').html('Thank you'); // 這等價于// this.$el.find('.text').html('Thank you');

  如果你需要更新一個別的不同的視圖,只要觸發一個事件,讓別的視圖去做。你也可以使用Backbone的全局Pub/Sub系統。

  例如,我們阻止頁面滾動:

var BodyView = Backbone.View.extend({  initialize: function() {    this.listenTo(Backbone, 'CSS規則: overflow: hidden;    this.$el.toggleClass('prevent-scroll', prevent);  }}); // 現在從任何其他地方調用:Backbone.trigger('prevent-scroll', true);   // 阻止 scrollingBackbone.trigger('prevent-scroll', false);  // 允許 scrolling

  還有一件事

  只要讀讀backbone的源代碼,你會學到更多。看一看backbone.js的源代碼,然后看看這些神奇的事情是怎么實現的。這個庫非常小,而且可讀性很好,整個讀完不會超過10分鐘的。

  這些小貼士幫助我們寫干凈的,更好的可讀的代碼。

  原文:geeks.bizzabo.com


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜阳市| 平遥县| 宣化县| 海原县| 横峰县| 湖南省| 读书| 鲜城| 普定县| 南木林县| 芜湖县| 德格县| 宾川县| 天祝| 堆龙德庆县| 郧西县| 贡嘎县| 京山县| 年辖:市辖区| 梧州市| 彭泽县| 太谷县| 赫章县| 晋中市| 绥芬河市| 鸡泽县| 马山县| 石泉县| 辛集市| 禹城市| 贡嘎县| 灵川县| 青岛市| 荣成市| 两当县| 东兴市| 普定县| 武功县| 怀安县| 黑龙江省| 常州市|