Polymer:firebase DB不使用firebase-element进行更新

时间:2015-10-10 12:26:42

标签: javascript firebase firebase-realtime-database polymer polymer-1.0

我尝试使用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 db的样子:

{
   ...
   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的任何建议吗?

1 个答案:

答案 0 :(得分:7)

根据我最初的假设(这是完全错误的),我认为这种行为与firebase-document元素有关,事实上,行为在Polymer's Data Binding内被明确定义系统。

解决方案1:替换整个属性。

Sub nnn()

'Tools - References - Microsoft Scripting Runtime
Dim myArray As Variant
Dim myRow As Long
Dim dicMyDictionary As Scripting.Dictionary
Set dicMyDictionary = New Scripting.Dictionary

With ThisWorkbook.Worksheets("Sheet1")

    myArray = Range(Cells(1, 1), Cells(100000, 1)).Value

    For myRow = LBound(myArray, 1) To UBound(myArray, 1)
        dicMyDictionary.Add myRow, myArray(myRow, 1)
    Next myRow

    myArray = dicMyDictionary.Items

    .Range("B1").Resize(dicMyDictionary.Count, 1).Value = Application.Transpose(myArray)
    Set dicMyDictionary = Nothing

End With

End Sub

解决方案2:让系统知道Path Binding已更新。

this.stats = {count: 2};

解决方案3:让Polymer为您处理路径绑定内容。

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

直接来自docs

  

这个系统“正常工作”到对象子属性的更改是由于绑定到更改的通知自定义元素属性而发生的。但是,有时命令式代码需要直接更改对象的子属性。由于我们避免使用更复杂的观察机制(如Object.observe或脏检查)以便为最常见的用例实现跨平台的最佳启动和运行时性能,因此直接更改对象的子属性需要用户的协作。 / p>      

具体来说,Polymer提供了两种方法,允许将这些更改通知给系统:notifyPath(path,value)和set(path,value),其中path是标识路径的字符串(相对于host元素)。

还有一个Polycast,Rob Dodson非常详细地解释了这些内容。