在我的流星项目中,我试图获取一个流星对象并在html中迭代它。
我的HTML代码如下:
<ul>
{{#each userTerritory myObject}}
<li class="">{{myObject.name}}</li>
{{/each}}
</ul>
在client.js中创建了一个帮助器类,我正在进行如下方法调用,以从mongo db中检索对象
Template.dash_board_content1.helpers({
'userTerritory': function(){
Meteor.call('userTerritoryList',function(error,result){
console.log(result);
if(!error){
return result;
}else{
alert("error : " + error);
}
});
}
});
server.js中的方法如下:
in server.js
'userTerritoryList': function(){
console.log("testing");
return Country.find().fetch();;
}
答案 0 :(得分:0)
默认情况下,Meteor方法无法与Blaze的帮助程序一起使用,为了使它们协同工作,您可以使用此程序包:meteor-reactive-method
Template.dash_board_content1.helpers({
userTerritory: function(){
return ReactiveMethod.call('userTerritoryList');
}
});
答案 1 :(得分:0)
编辑:正如@zim指出的那样,您可能更喜欢使用Meteor的发布和订阅功能。这将是您描述的问题的最佳解决方案。
进一步阅读:https://guide.meteor.com/data-loading.html
如果仍然依赖于使用服务器端调用,则可以使用反应方法包,如@Khang指出的那样。如果您希望对结果值进行更细粒度的访问,则应使用反应式字典:
class DoSomething extends AsyncTask<Void, String, String> {
private Context mContext;
public DoSomething(Context context) {
mContext = context;
}
@Override
protected String doInBackground(Void... voids) {
/*Use Context here*/
return null;
}
}
然后您可以通过Template.instance():
访问被动dictimport {Template} from 'meteor/templating';
import {ReactiveDict} from 'meteor/reactive-dict';
// create a new reactive dictionary to store reactive variables
// let's call it state
Template.dash_board_content1.onCreated(function onCreated(){
//this refers to the Template.instance() here
this.state = new ReactiveDict();
//initial value of userTerritoryList is null
//it will return nothing until it has been changed
this.state.set('userTerritoryList', null);
//you can even set an errors variable
this.state.set('errors', []);
});
useTerritory帮助程序仅在尚未设置时才使用Meteor.call。不过,您可以轻松更改方法,以便始终调用方法。
请注意,您也可以实现更精细的错误处理。