无法在html中接收流星对象

时间:2017-02-14 05:00:55

标签: javascript meteor meteor-blaze

在我的流星项目中,我试图获取一个流星对象并在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();;
}

2 个答案:

答案 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():

访问被动dict
import {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。不过,您可以轻松更改方法,以便始终调用方法。

请注意,您也可以实现更精细的错误处理。