Javascript 流星更新集合不';无法在客户端上刷新
我有一个集合,该集合具有样式属性,我迭代该属性并将其应用于相应的元素:Javascript 流星更新集合不';无法在客户端上刷新,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一个集合,该集合具有样式属性,我迭代该属性并将其应用于相应的元素: // server side Meteor.publish('elements', function(){ return Elements.find(); }); //client side Meteor.subscribe("elements"); setupElements = function () { var currentUserId = Meteor.userId(); var eleme
// 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>
文档在数据库中更新,但模板/视图不会对更改做出反应,直到我刷新页面或再次触发事件。服务器更新数据库时,似乎没有在客户端刷新数据库。想知道什么是使重新应用样式成为反应式的正确设置,或者是否有强制刷新模板的方法
提前谢谢 虽然使用标准的反应式html和JQuery可能有更好的方法来完成您正在做的事情。就你的问题而言: Javascript是异步的。
setupElements
在结果从服务器到达之前激发。只需在回调中启动它即可。call
回调:
Meteor.call('updateElements', setupElements);
什么。。。你为什么要评估()?eval()字符串似乎已经过时了。你是在遵循某种邪恶的教程吗?@Poyli请记住客户端上的javascript是异步的。正在发生的事情是,
setupElements
在调用任务完成之前正在运行。@Kyll这只是我粗略地尝试遍历每个对象,获取相应的id并应用其样式属性。需要重构该部分,但将单独进行。我明白了,我认为客户端维护了一个过时的collection版本,但它只是在更新准备就绪之前启动的。是的,当前的设置肯定可以重构,我将单独进行研究。谢谢!
Meteor.call('updateElements', setupElements);