2012-04-15 35 views
1

流星许诺反应更新,以便在数据更改时自动更新视图。包含的排行榜示例演示了这一点。当我测试它时,它运行良好:数据在不同浏览器中的多个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包已安装)。

回答

2

这里的问题是输入元素保存。 Meteor将在模板重绘期间保留任何表单字段的输入状态,其中idname属性。重画是保留表单元素中的旧文本,因为您不希望中断另一个用户输入相同的字段。如果您从文本框中删除name属性,则每个选项卡将在模糊时更新。

事实上,我不确定为什么第一次更新在你的例子中起作用。这实际上可能是错误!

通过在每个浏览器中打开控制台,您可以看到它不是数据问题。在每个模糊事件中,您将在每个打开的选项卡中获得更新的文档。 (类型Items.find().fetch()

+0

感谢您的澄清。我想我错过了有关元素保存的[documentation](http://docs.meteor.com/#livehtml)中的相关部分。 – zwippie 2012-04-16 08:24:52

相关问题