個人開發者的不二選擇吧,BaaS
更新說明
- 20171119 發布
- 20171124 增加數據綁定一節
- 20171125 修改數據綁定一節
最近在用 Bmob 做一小程序,后端沒有時間來做,就用了 Bmob,感覺還算簡單,但文檔呢感覺寫的一般,不夠細致,這里呢就做一個筆記吧,方便大家學習。
1. 數據添加
如果云端數據庫中不存在相應的表,Bmob 會自動地在你第一次使用它的時候創建。對于不存在的字段也是一樣的。
2. 數據修改
對于數據修改,Bmob 文檔提供了兩種方式:
// method 1
result.set('title', 'test!');
result.save();
// method 2
result.save({
title: 'test!'
});
對于第二種,我有一個疑問,save 的對象如果還存在 content 字段,但是沒有傳進去會怎么樣,會不會被修改為 null,實踐結果當然是不會是 null。
3. 數據關聯
3.1 Include method
對于數據關聯對象的查詢,官方文檔代碼如下:
var query = new Bmob.Query(Comment);
query.include("post");
// 可以這樣獲取 include 對象的屬性
obj.get("includeObj").field
// 官方文檔沒有說明,使用 include 語句無法訪問 id屬性
// 即 obj.get("includeObj").id == undefined
如果要獲取具體的 id 值,可以采用下面兩種方式方式:
// 這種方式只有 id 屬性比如 createdAt 屬性是沒有的
var query = new Bmob.Query(Comment);
obj.get("includeObj").id
// either
var query = new Bmob.Query(Comment);
obj.get("includeObj").objectId
圖片
3.2 equalTo method
var objectId;
var currentUser = Bmob.User.current();
objectId = currentUser.id;
var Diary = Bmob.Object.extend("diary");
var query = new Bmob.Query(Diary);
var isme = new Bmob.User();
isme.id = objectId; //當前用戶的objectId
query.equalTo("own", isme);
最后這一句 query.equalTo("own", isme);
其實可以直接寫成query.equalTo("own", objectId);
,代碼就可以少寫一點。
var objectId;
var currentUser = Bmob.User.current();
objectId = currentUser.id;
var Diary = Bmob.Object.extend("diary");
var query = new Bmob.Query(Diary);
query.equalTo("own", objectId);
4. 數據綁定
之前我實現在實現小程序的數據綁定時,用了一種不優雅的方法:
<view class="weui-form-preview__value">{{form.get('pickupCode')}}</view>
wx.setStorageSync('form', form)
form: wx.getStorageSync('form')
后來才發現這樣是多此一舉,直接這樣就行了,也不用調用 wx.setStorage
了
<view class="weui-form-preview__value">{{form.pickupCode}}</view>
4.2 深入
在小程序的官方文檔(框架 -> 注冊頁面)有如下的說明:
初始化數據將作為頁面的第一次渲染。data 將會以 JSON 的形式由邏輯層傳至渲染層,所以其數據必須是可以轉成 JSON 的格式:字符串,數字,布爾值,對象,數組。
所以說上面代碼中的 Bomb.Object
將會首先轉化成 JSON,再由 JSON 轉化成 js 對象,
根據 wx.getStorage
獲得的對象來看,也是用了同樣的方式。
繼續深入 js 與 JSON,在 MDN 上發現了:
如果一個被序列化的對象擁有 toJSON 方法,那么該 toJSON 方法就會覆蓋該對象默認的序列化行為:不是那個對象被序列化,而是調用 toJSON 方法后的返回值會被序列化
一切就真相大白了,由于 Bmob.Object
默認提供了 toJSON 方法,所以 weapp 在序列化 Bmob.Object
時,會采用已經定義好的方式進行序列化,最后就形成了我們看到的情況。