1

这对于将数据从纸张输入同步到 firebase 数据库的解决方案如何。

properties: {
            teamid: {
                type: String,
                value: null
            },
            formid: {
                type: String,
                value: null
            },

            metaName: {
                type: String, 
                value: null,
                observer: '_updateMetaName'
            }
        },


        _updateMetaName: function(metaName) {
            var path = 'formModel/' + this.teamid + '/' + this.formid + '/meta/name';

            firebase.database().ref(path).set(metaName);
        },

数据metaName来自一个 paper-input 元素

<paper-input value="{{metaName}}"></paper-input>

我在 on-change 属性上使用了观察者,因为我讨厌用户必须移出输入才能使其持续存在的想法。我也选择不使用 PolymerFire,因为我没有一些我需要的功能,而且它还没有准备好生产。

我也不喜欢观察者在任何数据更改之前多次运行的想法。这应该,我想,打破它,但它的工作令我惊讶。

我还有什么其他选择?它们对我当前的解决方案有什么缺点吗?

4

2 回答 2

1

一个缺点是每次击键都会触发对 Firebase 的请求,这可能效率低下(浪费 CPU 和带宽)。

为了解决这个问题,您可以使用 来消除回调this.debounce(jobName, callback, wait),如以下演示所示。

HTMLImports.whenReady(_ => {
  "use strict";

  Polymer({
    is: 'x-foo',
    properties : {
      metaName: {
        type: String,
        value: 'Hello world!',
        observer: '_metaNameChanged'
      }
    },
    _setFirebaseMetaName: function(metaName) {
      var path = 'formModel/' + this.teamid + '/' + this.formid + '/meta/name';
      //firebase.database().ref(path).set(metaName);
      console.log('metaName', metaName);
    },
    _metaNameChanged: function(metaName) {
      this.debounce('keyDebouncer',
                    _ => this._setFirebaseMetaName(metaName),
                    500);
    }
  });
});
<head>
  <base href="https://polygit.org/polymer+1.5.0/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link rel="import" href="paper-input/paper-input.html">
</head>
<body>
  <x-foo></x-foo>

  <dom-module id="x-foo">
    <template>
      <paper-input label="Meta Name" value="{{metaName}}"></paper-input>
    </template>
  </dom-module>
</body>

密码笔

于 2016-06-26T22:12:41.413 回答
1

我决定on-keyup="_updateViewDesc"停止在多个客户端打开相同页面时发生的错误。使用观察者,当一些数据更新时,它会在所有连接的客户端上触发观察者。导致字符丢失。

于 2016-06-29T15:58:27.747 回答