javascript - off - firebase once



聚合物:firebase數據庫不更新使用firebase元素 (1)

我正在嘗試設置與Polymer 1.0的Firebase連接:

<link rel="import" href="/bower/firebase-element/firebase-document.html">

  ...
  <firebase-document id='fstats'
    location="https://polymer-redux.firebaseio.com/stats"
    log="true"
    data="{{stats}}"></firebase-document>
   ...
   this.properties = {
       stats: {
          type: Object,
          observer: '_handleFirebaseStats',
          notify: true
       }
       ...
 _handleFirebaseStats(stats) {
     ...
 }

這裡是我的firebase數據庫的樣子:

{
   ...
   stats: { count: 0 }
}

現在,在_handleFirebaseStats裡面我收到{ count: 0 } ,那部分工作得很好。 但我也想將數據保存到Firebase。 我試過了:

this.$.fstats.set({count: 2});
this.$.fstats.set({stats: {count: 2}});
this.stats.count = 2;
// etc

無論如何,無論我在我的聚合物應用程序嘗試,FireBase永遠不會更新。 有關如何更新Firebase的建議?


按照我最初的假設(這是完全錯誤的) ,我認為這個行為與firebase-document元素有關,事實上,在Polymer的數據綁定係統中,行為是很好的定義

解決方案1:替換整個屬性。

this.stats = {count: 2};

解決方案2:讓系統知道路徑綁定已更新。

this.stats.count = 2;
this.notifyPath('stats.count', this.stats.count);

解決方案3:讓聚合物為您處理路徑綁定的東西。

this.set('stats.count', 2);

直接從文檔

這個系統“正常工作”,以至於由於被綁定到通知的定制元素屬性而發生對對象子屬性的改變。 但是,有時候命令式的代碼需要直接改變對象的子屬性。 由於我們避免了更複雜的觀察機制,例如Object.observe或dirty-checking,以便在最常見的用例中實現最佳的啟動和運行時性能跨平台,所以直接更改對象的子屬性需要用戶的合作。

具體來說,Polymer提供了兩種允許將這些更改通知給系統的方法:notifyPath(path,value)和set(path,value),其中path是標識路徑(相對於主機元素)的字符串。

還有一個Polycast ,Rob Dodson在這方面做了很詳細的解釋。





polymer-1.0