Meteorはリアクティブ更新を約束しているため、データが変更されたときにビューが自動更新されます。含まれているリーダーボードの例は、これを示しています。テストすると正常に動作します。データは、予想どおり、さまざまなブラウザの複数のブラウザタブで更新されます。
すべての準備が整い、meteorでコーディングを開始し、進捗が進んでいましたが、browertab全体のリアクティブな更新をテストしたところ、タブ間の更新が停止したのはしばらくしてからでした。
新しい空の流星プロジェクトに基づいて、問題を次のコードに要約しました。
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'});
}
});
}
複数のbrowsertabで実行し、1つのタブで入力値の変更を開始します。他のタブには変更が反映されます。次のタブに移動して、値を変更します。数回繰り返します。
しばらくすると、他のタブで更新が受信されなくなります。タブが値を変更すると、それ以上の更新を受信/表示しないようです。
リーダーボードの例との違い(非常に似ているため):
- リーダーボードはフォームコントロールを使用しません
- リーダーボードの例では、セットではなく、更新時にインクリメント操作を実行します
バグレポートを提出しようとしていますが、ここで愚かなことをしていないこと、またはMeteor Collectionの仕組みの重要な部分が欠落していないことを確認したいと思います(はい、自動公開パッケージがインストールされています)。