我需要在页面加载时从db加载一些数据列表。我使用过Template.layout.helpers并从服务器调用一个方法。但是,在控制台中可以看到未在模板上呈现但在辅助函数中检索数据的数据。我在这里缺少什么?
服务器
Posts = new Mongo.Collection("posts");
Meteor.methods({
'getposts':function(){
Future = Npm.require('fibers/future');
var future = new Future();
console.log('getposts called');
var posts = Posts.find({_id:"ThnBjGkFEQJ3CZ47d"}).fetch();
future.return(posts);
return future.wait();
}
});
客户端
Posts = new Mongo.Collection("posts");
Template.layout.helpers({
'posts': function () {
Meteor.call('getposts', function (error, response) {
console.log(response[0]);
console.log('xxxx');
return response[0];
});
},
'tests': function () {
var x = { title:"ioioioioio", description:"ioioioioio", _id:"ThnBjGkFEQJ3CZ47d"};
console.log(x);
console.log('yyyy');
return x;
}
})
模板
<template name="layout">
<div class="post">
xxxx
{{posts.title}}
----
{{tests.title}}
yyyy
</div>
</template>
答案 0 :(得分:1)
尝试使用Meteor publish-subscribe,在本例中为
在客户端,
Meteor.startup(function(){
Meteor.subscribe('posts')
})
和服务器端使用
Meteor.publish('posts', function(){
// this according to your code
return Posts.find({_id:"ThnBjGkFEQJ3CZ47d"});
})
并且在帮助者上,只需要调用此
Template.layout.helper({
posts: function(){
return Posts.find()
}
})
以上代码将被动地运作