2014-03-06 51 views
1

我剛剛開始使用AngularFire開發我的第一個項目,並且對於整個數據樹使用$bind與在每個子元素上明確使用$update有點混淆。

天真地看起來很容易$bind樹的根,並完成。但角火文檔說:

這種綁定是最有用的原始值,如字符串,布爾值和數字。

對我來說,嘗試同步深度樹與1000個節點和許多級別是有道理的。但我看到的情況更像是50個節點和3-4個層次。我是否錯過了一些有關$bind的內容,這會使它不適合自動保持整棵樹同步?

回答

0

當$綁定到整個樹時,您將爲每個更改事件發送和接收整個樹。例如,

/widgets/one/color/ 

如果我$ bind()的上部件,每次在任何部件的顏色變化,我現在調和系統中的每個部件。相反,爲了更新小部件上的顏色,我必須將整個樹寫回Firebase,以便有效地將系統中的每個小部件都設置爲(希望)預先存在的值。

相反,我可以用一個雙向同步的變化來拉:

var ref = new Firebase(URL+'/widgets'); 
$scope.widgets = $firebase(ref); 

而當我想更新一個,這樣做如下:

$scope.updateColor = function(widgetKey, color) { 
    var child = $scope.widgets.$child(widgetKey); 
    child.color = color; 
    child.$save(); // only save one record, phew 
}); 

更爲高效並且更安全,因爲用戶不會無意中覆蓋其他無意修改的記錄中的更改。

如果列表僅由單個用戶使用,並且從不同時修改,那麼這不是一個問題,唯一的問題就是帶寬(對於偶爾由單個更新的50個左右節點來說,這可能不是什麼大問題人)。

+0

謝謝,這絕對有助於澄清。 (Docs對此很粗略) –

+0

我們將在文檔上工作,以使這些事情更清晰! :) – Kato

0

我剛剛爲您創建了一個plnkr,這是最簡單的一個CRUD示例。你也可以git吧。

+0

除非我錯過了它,這似乎並沒有使用'$ bind',所以不是真的是我問的。 –