我在服务器端创建了一个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
if (Meteor.isClient) {
Template.booking.created = function() {
this.title = new ReactiveVar('');
}
Template.booking.helpers({
templateTitle: function(){
Meteor.call('templateTitle', function(err, data) {
console.log(data); //data is okey
Template.instance().title.set(data.value); //error on title
});
return Template.instance().title.get();
}
});
}
我也尝试过这种方式,但也没有效果
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);
});
});
}
'标题'有什么问题?变量或回调函数一般吗?
答案 0 :(得分:3)
来自Meteor Docs for Template.instance():
与当前模板助手,事件处理程序,回调或自动运行相对应的模板实例。如果没有,则为null。
我认为在这种情况下发生的事情是你要返回当前回调的模板实例(没有,所以null
),而不是当前的辅助。您应该能够通过在调用Method之前在本地保存模板实例来解决这个问题,然后在回调中引用它:
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();
}
});
}