在開始之前,需要了解
properties是extend方法中使用的稱呼,attributes是創(chuàng)建模型對象時使用的稱呼,classProperties是定義Backbone中各個類的類屬性。
事件
以下是 backbone 中事件相關(guān)的方法和知識
- on
- 用法,
Backbone.events.on(event,callback[,context]),可以結(jié)合_.clone()進(jìn)行使用 - 可以添加自定義事件,和
trigger結(jié)合使用 - 有命名空間
events:namespace,比如change:name - 使用
on方法有第三個參數(shù)context
- off
- 用法,
object.off([event,[callback],[context])
- trigger
- 用法,
object.trigger(evetn,[*args])
- once
- 用法和
on很像,區(qū)別在于綁定的回調(diào)函數(shù)觸發(fā)一次之后就會被移除
- listenTo
- 用法,
listenTo(other,event,cakkback) - 監(jiān)聽其他對象上的事件
- stopListening
- 用法,
stopListening([oter],[event],[callback])
- listenToOnce
- 用法和
listenTo很像,區(qū)別在于綁定的回調(diào)函數(shù)觸發(fā)一次后移除
// 在視圖中
events: {
'click [role=edit]': function () {}
}
事件目錄 (Catalog of Events)
關(guān)于集合的事件
- add
- 當(dāng)集合上添加模型對象時觸發(fā)
- 默認(rèn)參數(shù),model,collection,options
- remove
- 當(dāng)集合上移除模型對象的時候觸發(fā)
- 默認(rèn)參數(shù),model,collection,options
- reset
- 當(dāng)集合中全部內(nèi)容被替換時觸發(fā),比如
collection的fetch方法 - 默認(rèn)參數(shù),collection,options
- sort
- 當(dāng)集合已經(jīng)被重新排序時觸發(fā)
- 默認(rèn)參數(shù),collection,options
關(guān)于模型的事件
- change
- 當(dāng)一個模型的屬性改變時觸發(fā)
- 默認(rèn)參數(shù),model,options
change:[attribute]
- 當(dāng)一個模型中該特定屬性被更新時觸發(fā)
- 默認(rèn)參數(shù),model,value,options
- destroy
- 當(dāng)一個model被destroy時觸發(fā)
- 默認(rèn)參數(shù),model,collection,options
- invalid
- 當(dāng)模型在客戶端驗證失敗的時候觸發(fā),
validate選項 - 默認(rèn)參數(shù),model,error,options
關(guān)于請求的事件
- request
- 當(dāng) 模型 或 集合 開始發(fā)送請求的時候觸發(fā)
- 默認(rèn)參數(shù),
model_or_collection,xhr,options
- sync
- 當(dāng) 模型 或 集合 成功同步到服務(wù)器時觸發(fā)
- 默認(rèn)參數(shù),
model_or_collection,xhr,options
- error
- 當(dāng) 模型 或 集合 請求遠(yuǎn)程服務(wù)器失敗的時候觸發(fā)
- 默認(rèn)參數(shù),
model_or_collection,xhr,options
關(guān)于路由的事件
- route
- 當(dāng)任何一個路由相匹配通過路由器觸發(fā)
- 默認(rèn)參數(shù),route,params
route:[name]
- 當(dāng)一個特定路由相匹配通過路由器觸發(fā)
- 默認(rèn)參數(shù),params
特殊事件
- all
- 所有事件發(fā)生都能觸發(fā)這個特別的事件
- 第一個參數(shù)是觸發(fā)事件的名稱
小技巧
silent的設(shè)定,可以不觸發(fā)事件的回調(diào)函數(shù)
- 盡量少使用
silent:true,向回調(diào)函數(shù)傳入一個特定的判斷參數(shù)
模型
模型類的方法
Backbone.Model.extend(properties,[classAttributes])- 擴展父類已有方法,并且想要調(diào)用父類方法,需要明確指出并調(diào)用。下邊的分類,是常用的方式
擴展模型類的選項
模型的選項,有時可以當(dāng)作方法用
- constructor或initialize,在
new Backbone.model([attributes],[options])時調(diào)用
-
options可以設(shè)置collection:colName,如果沒有,當(dāng)模型添加到collection時會自動添加 -
options可以設(shè)置parse:true,當(dāng)使用set方法將數(shù)據(jù)setd到模型前調(diào)用parse方法
- idAttribute,設(shè)置模型的唯一標(biāo)識,默認(rèn)是id
- defaults,可以使用一個函數(shù)代替
- sync,少用,用于重新定義
- 項目中應(yīng)用,一般sync用來發(fā)送ajax請求,但有時只需要從已有數(shù)據(jù)中篩選出一部分,此時可以重寫
- validate,函數(shù)
- 也可以使用
model.validata()的方式 - 默認(rèn)在
save調(diào)用之前驗證,也可以在set之前驗證,需要設(shè)置validate:true - 不返回則通過檢驗,有返回值(可以是布爾類型,可以是字符串)則未通過檢驗
- validateError,當(dāng)
validate驗證失敗時候的返回值 - url
- 也可以使用
model.url()的方式
- urlRoot
- 可以使用
model.urlRoot的方式,也可以使用model.urlRoot()的方式
模型對象的屬性和方法
model代表是創(chuàng)建的模型對象,或稱為模型實例
model.get(attribute)model.set(attributes,[options])
- 觸發(fā)模型對象的change事件
-
model.escape(attribute)和get類似,但是返回HTML轉(zhuǎn)義版本的model屬性值 model.has(attribute)
- 當(dāng)該屬性值 非undefined 或 非null,返回true
model.unset(attribute)
- 從內(nèi)部屬性對象中刪除指定屬性
- 觸發(fā)模型對象的change事件
-
model.clear([options]),從模型中刪除所有屬性 -
model.toJSON()將模型中attributes淺拷貝 model.fetch([options])
- 將服務(wù)器中數(shù)據(jù)拉回,并映射到模型上,當(dāng)發(fā)生改變的時候,會觸發(fā)
change事件 -
options有success,error - 這兩個事件接受
model,response,options作為參數(shù)
model.save([attributes],[options])
- 當(dāng)?shù)谝淮伪4婺P?,方法名為create,方式為post
- 當(dāng)?shù)诙伪4婺P停椒麨閡pdate,方式為put
-
model.save(attrs,{patch}),方式為patch - 觸發(fā)
change事件,和request事件,響應(yīng)成功,會觸發(fā)sync/error事件。 -
options有success,error,wait選項 - 一般順序,先改模型,再同步到服務(wù)器上,如果想要等待服務(wù)器再設(shè)置新的屬性,那么要添加屬性
wait:true。當(dāng)出錯時,模型上保持舊的。
model.destroy([options])
- 觸發(fā)
destory事件,和request事件,響應(yīng)成功,會觸發(fā)sync事件。 -
options有success,error,wait
model.isValid()
- 可以運行
validate檢查模型狀態(tài)
model.id-
model.cid當(dāng)模型創(chuàng)建的時候自動生成的唯一標(biāo)志符 -
model.attributes模型內(nèi)部對象 -
model.changed改變的模型內(nèi)部對象,一般不使用它,使用model.changedAttributes() model.parse()
- 在
fetch從服務(wù)器返回數(shù)據(jù)模型數(shù)據(jù),以及save時執(zhí)行。 - 接受默認(rèn)參數(shù)
response,options
model.clone()model.isNew()
- 沒有 id 的模型就是新的
model.hasChanged()
- 在
change事件中使用 - 參數(shù)是需要檢驗的屬性名
model.changeAttributes([attributes])
- 在
change事件中使用 - 該模型上改變的所有屬性的集合
model.previous()
- 在
change事件中使用 - 參數(shù)是需要檢驗的屬性名
model.previousAttributes()
- 在
change事件中使用 - 該模型上改變的所有屬性舊值的集合
Underscore方法
Backbone代理了
Underscore.js用來給Backbone.Model提供的六個對象函數(shù),使用的時候可以使用模型對象直接使用
-
keys,獲得可枚舉屬性的數(shù)組 -
values,獲得可枚舉屬性的屬性值數(shù)組 -
pairs,把對象轉(zhuǎn)化成[key:value]數(shù)組 -
invert,返回一個 key 和 value 互換的對象副本,需要保證value是唯一的 -
pick,過濾出對象的某些屬性 -
omit,將對象的某些屬性過濾掉