流星许诺反应更新,以便在数据更改时自动更新视图。包含的排行榜示例演示了这一点。当我测试它时,它运行良好:数据在不同浏览器中的多个browsertabs上更新,如预期的那样。在其他浏览器中未收到反应更新
所有设置和去,我开始编写与流星和进展正在进行,但是当我测试了跨browertabs的反应更新,我注意到只有在一段时间后停止更新跨标签。
我归结了问题,下面的代码,基于一个新的空流星项目:
updatebug.html
<head>
<title>updatebug</title>
</head>
<body>
{{> form}}
</body>
<template name="form">
<form onsubmit="return false;">
{{#each items}}
{{> form_item }}
{{/each}}
</form>
</template>
<template name="form_item">
<div>
<label>{{name}}
<input type="text" name="{{name}}" value="{{value}}">
</label>
</div>
</template>
updatebug.js:
Items = new Meteor.Collection("items");
if (Meteor.is_client) {
Template.form.items = function() {
return Items.find();
};
Template.form_item.events = {
'blur input': function(e) {
var newValue = $(e.target).val();
console.log('update', this.name, this.value, newValue);
Items.update({_id: this._id}, {$set: {value: newValue}});
},
};
}
if (Meteor.is_server) {
Meteor.startup(function() {
if (Items.find().count() === 0) {
Items.insert({name: 'item1', value: 'something'});
}
});
}
在多个browsertabs中运行,开始更改一个选项卡中输入的值。其他选项卡将反映更改。转到下一个选项卡并更改值。重复几次。
过了一段时间,任何其他选项卡都不会收到更多更新。它似乎一旦一个选项卡已更改值,它不会收到/显示任何更新。
差异相比,横幅例(因为它是非常相似的):
- 排行榜不使用表单控件
- 排行榜示例执行上更新增量操作,而不是一组
我即将提交一个错误报告,但要确保我在这里没有做任何愚蠢的事,或者错过了Meteor Collection机制的重要部分(是的,autopublish包已安装)。
感谢您的澄清。我想我错过了有关元素保存的[documentation](http://docs.meteor.com/#livehtml)中的相关部分。 – zwippie 2012-04-16 08:24:52