[英]Meteor update collection doesn't refresh on client
我有一個具有樣式屬性的集合,可以對其進行迭代並應用於相應的元素:
// server side
Meteor.publish('elements', function(){
return Elements.find();
});
//client side
Meteor.subscribe("elements");
setupElements = function () {
var currentUserId = Meteor.userId();
var elements = Elements.find({user: currentUserId}).fetch();
elements.forEach(function(e){
var elementId = e._id;
eval("document.getElementById('" + elementId + "').removeAttribute(\"style\")");
var width = e.width;
for (var i in width) {
eval("document.getElementById('" + elementId + "').style.width"= \"" + width[i] + "\"");
}
});
}
Template.element.rendered = function() {
if(!this._rendered) {
this._rendered = true;
// iterate through element and apply width style to each
setupElements();
}
}
// template
<template name="element">
{{#each element}}
<div id="{{_id}}" class="element">{{text}}</div>
{{/each}}
<button id="change-style">Change style</button>
</template>
模板將渲染相應的寬度並將其應用於每個元素。 但是,當我觸發如下更新時:
'click #change-style': function() {
Meteor.call('updateElements'); // assume server-method successfully updated all elements
setupElements(); // thought this will fetch new style and re-apply
},
文檔已在數據庫中更新,但模板/視圖在更改頁面或再次觸發事件之前不會對更改做出反應。 好像數據庫在服務器上更新時未在客戶端上刷新。 想知道什么是正確的設置以使重新應用樣式具有響應性,或者是否存在強制刷新模板的方法。
提前致謝!
雖然可能有更好的方法通過使用標准的響應式html和JQuery來完成您的工作。 根據您的確切問題:
Javascript是異步的。 結果從服務器到達之前將觸發setupElements
。 只需在.call
回調中將其觸發:
Meteor.call('updateElements', setupElements);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.