【问题标题】:Avoid updating of local client避免更新本地客户端
【发布时间】:2015-03-02 05:06:28
【问题描述】:

我正在尝试将 Polymer 与 Meteor 一起使用,但如果您将状态设为响应式,则具有切换状态的元素会出现一些问题,例如 paper-checkbox

纸质复选框是普通复选框的更高级版本。它在 checkedunchecked 两种状态之间交替。如果您点击复选框,则会触发聚合物事件并切换状态。

当您使复选框状态为反应式时,就会出现问题。您将获得 Polymer 和 Meteor 之间的竞争条件。 Polymer 只是将复选框状态切换到与当前状态相反的状态,Meteor 根据集合中的值设置元素状态。

因此,根据哪个事件赢得比赛,复选框被设置为正确的状态或再次切换,因此显示为错误的状态。 集合中的状态始终是正确的,但前端显示混乱。

这是我的模板代码:

<template name="task">
  <paper-checkbox class="toggle-checked" {{isChecked}}></paper-checkbox>
  <span class="text">{{text}}</span>
</template>

以及相应的事件和助手:

Template.task.events({
  "click .toggle-checked": function (e) {
    // Set the checked property to the opposite of its current value
    Meteor.call("setChecked", this._id, ! this.checked);
  }
});

Template.task.helpers({
  isChecked: function () {
    return this.checked ? 'checked' : 'unchecked'; 
  }
});

Meteor.methods({
  setChecked: function (taskId, setChecked) {
    var task = Tasks.findOne(taskId);
    Tasks.update(taskId, { $set: { checked: setChecked} });
  })
});

有没有办法在 Task.update() 调用后防止流星更新本地客户端,但保持对其他客户端的反应?

【问题讨论】:

    标签: javascript meteor polymer


    【解决方案1】:

    尝试像这样更改您的事件处理程序:

    Template.task.events({
      "change .toggle-checked": function (e) {
        var checked = e.currentTarget.checked;
        if (checked !== this.checked) {
          Meteor.call("setChecked", this._id, checked);
        }
      }
    });
    

    【讨论】:

    • 您现在,将click 更改为change — 这解决了我项目中的相同问题。谢谢!我也使用fastclick 包。
    猜你喜欢
    • 2018-03-31
    • 2018-10-26
    • 2021-12-16
    • 2019-06-21
    • 2011-01-09
    • 2021-04-13
    • 2022-11-11
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多