我尝试使用Polymer 1.0设置Firebase连接:
< link rel =importhref = /bower/firebase-element/firebase-document.html\"> ... < firebase-document id ='fstats' location =polymer-redux.firebaseio/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 元素,事实上,行为在聚合物的数据绑定系统。 解决方案1:替换整个属性
this.stats = {count:2};解决方案2:让系统知道路径绑定已被更新
this.stats.count = 2; this.notifyPath('stats.count',this.stats.count);解决方案3:让聚合物为您处理路径绑定的东西。 $ b this.set('stats.count',2);直接从 docs :
系统只是起作用,以至于由于被绑定到改变的通知自定义元素属性而出现对对象子属性的改变。但是,有时候命令式的代码需要直接改变对象的子属性。由于我们避免了更复杂的观察机制,例如Object.observe或脏检查(dirty-checking),以便为大多数常见用例实现最佳的启动和运行时性能,因此直接更改对象的子属性需要用户进行合作。 / p>
具体来说,Polymer提供了两种允许将这些更改通知给系统的方法:notifyPath(path,value)和set(path,value),其中path是一个字符串确定路径(相对于主机元素)。
还有一个 Polycast Rob Dodson详细解释了这件事情。
I'm trying to setup a firebase connection with Polymer 1.0:
<link rel="import" href="/bower/firebase-element/firebase-document.html"> ... <firebase-document id='fstats' location="polymer-redux.firebaseio/stats" log="true" data="{{stats}}"></firebase-document> ... this.properties = { stats: { type: Object, observer: '_handleFirebaseStats', notify: true } ... _handleFirebaseStats(stats) { ... }Here is how my firebase db looks like:
{ ... stats: { count: 0 } }Now, inside the _handleFirebaseStats I receive { count: 0 }, that part works great. But I would also like to save data back to firebase. I've tried:
this.$.fstats.set({count: 2}); this.$.fstats.set({stats: {count: 2}}); this.stats.count = 2; // etcAnyway, whatever I try in my polymer app, FireBase is never updated. Any suggestions on how to update firebase ?
解决方案As per my initial assumption (which was completely wrong), I thought the behavior had something to do with firebase-document element, infact the behavior is well defined inside the Polymer's Data Binding system.
Solution 1: Replace the whole property. this.stats = {count: 2};Solution 2: Let the system know a Path Binding has been updated.
this.stats.count = 2; this.notifyPath('stats.count', this.stats.count);Solution 3: Let the Polymer handle the path binding stuff for you.
this.set('stats.count', 2);Straight from the docs:
This system "just works" to the extent that changes to object sub-properties occur as a result of being bound to a notifying custom element property that changed. However, sometimes imperative code needs to change an object’s sub- properties directly. As we avoid more sophisticated observation mechanisms such as Object.observe or dirty-checking in order to achieve the best startup and runtime performance cross-platform for the most common use cases, changing an object’s sub-properties directly requires cooperation from the user.
Specifically, Polymer provides two methods that allow such changes to be notified to the system: notifyPath(path, value) and set(path, value), where path is a string identifying the path (relative to the host element).
Also there is a Polycast where Rob Dodson explains this stuff in great detail.
更多推荐
聚合物:firebase数据库不更新使用firebase元素
发布评论