避免更新本地客户端
Avoid updating of local client
我正在尝试使用 Polymer with Meteor, but there are some problems with elements that have a toggle state, for example the paper-checkbox,如果你使状态响应。
paper-checkbox 是普通复选框的高级版本。它在 checked 和 unchecked 两种状态之间交替。如果点击复选框,则会触发聚合物事件并切换状态。
当您使复选框状态具有反应性时,就会出现问题。您将在 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} });
})
});
有没有办法防止 meteor 在 Task.update() 调用后更新本地客户端,但保持对其他客户端的反应?
尝试像这样更改您的事件处理程序:
Template.task.events({
"change .toggle-checked": function (e) {
var checked = e.currentTarget.checked;
if (checked !== this.checked) {
Meteor.call("setChecked", this._id, checked);
}
}
});
我正在尝试使用 Polymer with Meteor, but there are some problems with elements that have a toggle state, for example the paper-checkbox,如果你使状态响应。
paper-checkbox 是普通复选框的高级版本。它在 checked 和 unchecked 两种状态之间交替。如果点击复选框,则会触发聚合物事件并切换状态。
当您使复选框状态具有反应性时,就会出现问题。您将在 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} });
})
});
有没有办法防止 meteor 在 Task.update() 调用后更新本地客户端,但保持对其他客户端的反应?
尝试像这样更改您的事件处理程序:
Template.task.events({
"change .toggle-checked": function (e) {
var checked = e.currentTarget.checked;
if (checked !== this.checked) {
Meteor.call("setChecked", this._id, checked);
}
}
});