簡體   English   中英

流星更新集合未在客戶端刷新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM