我正在尝试通过服务器方法运行下面显示的查询,遗憾的是,此查询返回的数组中的数据未显示在我的模板中,我在这里缺少什么/做错了?
/server/methods.js
Meteor.methods({
'getCategoriesEx': function () {
return Categories.find({children: {$size: 0}},{sort: {name: 1}}).fetch();
}
});
/client/categories.js
Template.Categories.rendered = function() {
};
Template.Categories.helpers({
categories: function() {
Meteor.call('getCategoriesEx', function(error, list){
if(error)
return alert(error.reason);
return list;
});
}
})
/client/categories.html
<div class="col_half">
<label for="categories"> categories </label>
<select id="categories" name="categories" class="sm-form-control">
<option value="">-- Select One --</option>
{{#each categories}}
<option value="{{_id}}">{{name}}</option>
{{/each}}
</select>
</div>
查询返回的数据:
[Object, Object, Object, Object]
0: Object
_id: "Pwmd9wFTf8zs8nbWn"children: Array[0]title: "A1"__proto__: Object
1: Object
2: Object
3: Object
答案 0 :(得分:1)
您没有在助手中使用被动数据源。通过发布数据对其进行重组以使用客户端响应式迷你mongo查询。
这样的事情: 服务器:
Meteor.publish("categories", function() { return Categories.find(); }
客户:
Template.Categories.created = function() {
Meteor.subscribe("categories");
};
Template.Categories.helpers({
categories: function() {
return Categories.find({children: {$size: 0}},{sort: {name: 1}});
}
})
答案 1 :(得分:0)
克里斯的答案是做事的标准方式,但是你已经明确表示你正试图使用一种方法,所以我认为这是有原因的。
问题在于你的助手在被调用的时候没有返回任何内容(它调用方法并立即返回)。在回调回调时,没有什么可以将数据返回到。
一种解决方案是更新反应变量。例如,使用Sessions对象。
另请注意,可以经常调用帮助程序。每次调用帮助程序时,您可能并不真正想要调用服务器方法。放置它的更好的地方是渲染的代码。所以(未经测试):
Template.Categories.rendered = function() {
Meteor.call('getCategoriesEx', function(error, list){
if(error)
alert(error.reason);
Session.set('categories', list);
});
}
Template.Categories.helpers({
categoriesResult: function() {
return Session.get('categories')
})
和
<div class="col_half">
<label for="categories"> categories </label>
<select id="categories" name="categories" class="sm-form-control">
<option value="">-- Select One --</option>
{{#each categoriesList}}
<option value="{{_id}}">{{name}}</option>
{{/each}}
</select>
</div>