Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递调用模板实例变量的方法调用的结果时出现异常_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 传递调用模板实例变量的方法调用的结果时出现异常

Javascript 传递调用模板实例变量的方法调用的结果时出现异常,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我在服务器端创建了一个templateTitle方法来发布Mongo中的一些数据 Theme = new Mongo.Collection("theme"); if (Meteor.isServer) { Meteor.startup(function () { Theme.insert({template: 'booking', value: 'val_example'}); }); Meteor.methods({ templateT

我在服务器端创建了一个templateTitle方法来发布Mongo中的一些数据

Theme = new Mongo.Collection("theme");
if (Meteor.isServer) {
    Meteor.startup(function () {
        Theme.insert({template: 'booking', value: 'val_example'});
    });

    Meteor.methods({
        templateTitle: function () {
            return Theme.findOne({template: 'booking'}, {value:1});
        }
    });  
}
在客户端,我尝试通过调用templateTitle方法“订阅”该数据-在回调函数中,我希望保存检索到的值并将其保存在反应变量中,但这里出现了一个类型错误

传递调用“templateTitle”的结果时出现异常:TypeError: 无法读取null的属性“title”

我也试过这种方法,但效果不太好

if (Meteor.isClient) {
    Template.booking.created = function() {
        this.title = new ReactiveVar('');

        this.autorun(function () {
            Meteor.call('templateTitle', function(err, data) {
                this.title.set(data.value);
            });
        });
    }
“title”变量或回调函数通常有什么问题?

来自:

与当前模板帮助程序、事件处理程序、回调或自动运行相对应的模板实例。如果没有,则为null

我认为在这种情况下,您返回的是当前回调的模板实例(没有,因此
null
),而不是当前帮助程序。在调用该方法之前,您应该能够通过在本地保存模板实例,然后在回调中引用该实例来解决此问题:

if (Meteor.isClient) {
  Template.booking.created = function() {
      this.title = new ReactiveVar('');
  }
  Template.booking.helpers({
      templateTitle: function(){
          var tmplInst = Template.instance();
          Meteor.call('templateTitle', function(err, data) {
              console.log(data); //data is okey
              tmplInst.title.set(data.value); //error on title
          });
          return Template.instance().title.get();
      }
  });
}

@Zimyslaw您是否也包含了从您的上述尝试中创建的
模板.booking.created
部分?您需要在创建时启动变量,将其作为模板实例的一部分;我只是想给你的助手加上那一行。我对答案进行了编辑,希望它更清晰,更有效
if (Meteor.isClient) {
  Template.booking.created = function() {
      this.title = new ReactiveVar('');
  }
  Template.booking.helpers({
      templateTitle: function(){
          var tmplInst = Template.instance();
          Meteor.call('templateTitle', function(err, data) {
              console.log(data); //data is okey
              tmplInst.title.set(data.value); //error on title
          });
          return Template.instance().title.get();
      }
  });
}