model本身除了可以當作儲存資料的物件,透過Model本身提供的fetch與save method即可對Server做儲存與讀取,而要取得資料的server API路徑則是設定在model.url上
fetch與save都是透過jQuery或zepto的ajax來達成,所以在使用backboneJS之前一定要先導入jQuery(或zepto)與underscore
二.model.fetch()
當直接執行model.fetch()完成後,會由server端取得的json物件,所有的json物件屬性全部都會倒進model的atrribute內並觸發change event,這時如果有監聽attribute上的相關屬性,所設定的callback都會被觸發
例
server端 info.json
{ "isLogin":true, "nowPlayList":"my", "nowPlayIndex":0 } client端 window.Item=Backbone.Model.extend() window.item=new Item({id:5}); item.url="json_sample/Info.json"; item.fetch(); item.bind("change:isLogin",function(){ console.log('chang isLogin') })
當執行fetch()後會觸發change而跳出alert,且這時item這個model內已經有了來自server端的資料
alert(item.get(“isLogin”))//true
三.model.fetch({success,error})
如果fetch取得的結果需要做其他應用或要對fetch失敗做處裡,可以在fetch內設定success與error callback,所設定的success與error callback會接收到兩個參數response與jsonObj(jsonObj在api文件內是用model代表)
在success內接收到的兩個參數,jsonObj是取得資料的json物件,response則已經是個包了接收資料的model物件,也就是說response物件包了attributes屬性,並把server取得的資料都放到了attributes內
例
window.Item=Backbone.Model.extend({ url:function(){ return 'server/simple.json'; }, myname:'OZClass' }); window.item=new Item({}); item.fetch({ success:function(response,model){ } })
注意:
success內接收到的jsonObj是個json物件,所以可以用obj.prop方式(如jsonObj.nowPlayList)
來讀取json物件屬性,response則是一個model物件,則就需要靠response.get(“nowPlayList”)來取得),若這時候在success用jsonObj.get(“nowPlayList”)會出錯
四. parse
通常只需要使用Model內預設的parse method即可,在自訂Model class時並不需要再定義這method,平常在使用model時也不需要呼叫執行parse,當執行fetch取得資料後,model內部自動會把取得的結果先執行parse處裡過
如果有需要改變取得的內容再寫入model才需要寫parse method
在success中只能將response的結果做其他利用,如果希望改變response的結果,那就需要改寫
parse medthod
window.Item=Backbone.Model.extend({ parse:function(response){ response.name="["+response.name+"]"; console.log(response.name) return response }, });
1 則留言:
感謝 Ozzysun您分享的blog寫的很詳盡,但在實作時發現有些小小的奇怪地方。
後來找到第三點,model.fetch({success,error}) 裡實作的程式碼。
第九行success 狀態 function裡的參數(response, model)。參考文件後發現改為function(model, response)程式碼變正常了。
謝謝提供文章,小小的閱讀回饋。感謝!!
張貼留言