Meteor ReactiveVar 在事件中不适用于 Meteor.call
Meteor ReactiveVar doesnt works with Meteor.call in event
我正在使用 ReactiveVar。 onCreated
我设置了 ReactiveVar with Meteor.Call
。当我尝试从 event
更改我的反应变量时,我得到 Exception in delivering result of invoking 'namelist'
希望我下面的代码能更多地解释我的问题。
模板:
<template name="Name">
{{#each list}}
Name : {{name}}
Age : {{age}}
{{/each}}
<button class="loadmore">Load More</button>
<template>
助手:
Template.Name.helpers({
'list': function(){
return Template.instance().list.get();
}
})
创建时:
Template.Name.onCreated(function () {
this.limit = new ReactiveVar(5);
this.skip = new ReactiveVar(0);
this.list = new ReactiveVar();
Meteor.call("namelist", Template.instance().skip.get(), Template.instance().limit.get(), function(error, result) {
if(error){
alert("Oops!!! Something went wrong!");
return;
} else {
this.list.set(result);
this.skip.set(this.limit.get());
this.limit.set(this.limit.get()+5);
return;
}
}.bind(this));
});
事件:
Template.Name.events({
'click .loadmore': function(event, template) {
Meteor.call("namelist", template.skip.get(), template.limit.get(), function(error, result) {
if(error){
alert("Oops!!! Something went wrong!");
return;
} else {
temp = template.list.get();
temp.push(result);
template.list.set(temp); // Here I am getting error of Exception in delivering result of invoking 'namelist'
template.skip.set(template.limit.get());
template.limit.set(template.limit.get()+5);
return;
}
});
}
});
如果不执行代码,我无法准确判断发生了什么,但可能是您的初始 Meteor.call
没有将 list
设置为数组。此外, temp
声明时没有 var
所以它泄漏到全局命名空间中。在您的事件处理程序中,您可以尝试这样写:
var temp = template.list.get() || [];
temp.push(result);
template.list.set(temp);
我正在使用 ReactiveVar。 onCreated
我设置了 ReactiveVar with Meteor.Call
。当我尝试从 event
更改我的反应变量时,我得到 Exception in delivering result of invoking 'namelist'
希望我下面的代码能更多地解释我的问题。
模板:
<template name="Name">
{{#each list}}
Name : {{name}}
Age : {{age}}
{{/each}}
<button class="loadmore">Load More</button>
<template>
助手:
Template.Name.helpers({
'list': function(){
return Template.instance().list.get();
}
})
创建时:
Template.Name.onCreated(function () {
this.limit = new ReactiveVar(5);
this.skip = new ReactiveVar(0);
this.list = new ReactiveVar();
Meteor.call("namelist", Template.instance().skip.get(), Template.instance().limit.get(), function(error, result) {
if(error){
alert("Oops!!! Something went wrong!");
return;
} else {
this.list.set(result);
this.skip.set(this.limit.get());
this.limit.set(this.limit.get()+5);
return;
}
}.bind(this));
});
事件:
Template.Name.events({
'click .loadmore': function(event, template) {
Meteor.call("namelist", template.skip.get(), template.limit.get(), function(error, result) {
if(error){
alert("Oops!!! Something went wrong!");
return;
} else {
temp = template.list.get();
temp.push(result);
template.list.set(temp); // Here I am getting error of Exception in delivering result of invoking 'namelist'
template.skip.set(template.limit.get());
template.limit.set(template.limit.get()+5);
return;
}
});
}
});
如果不执行代码,我无法准确判断发生了什么,但可能是您的初始 Meteor.call
没有将 list
设置为数组。此外, temp
声明时没有 var
所以它泄漏到全局命名空间中。在您的事件处理程序中,您可以尝试这样写:
var temp = template.list.get() || [];
temp.push(result);
template.list.set(temp);