2012-04-15 74 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

相關問題