2015-05-18 6 views
0

Я использую ReactiveVar. onCreated I комплект ReactiveVar with Meteor.Call. Когда я пытаюсь изменить свои реактивные переменные от event, я получаю Exception in delivering result of invoking 'namelist' Надеюсь, мой код ниже объяснит мою проблему больше.Meteor ReactiveVar не работает с Meteor.call в случае

Шаблон:

<template name="Name"> 
    {{#each list}} 
     Name : {{name}} 
     Age : {{age}} 
    {{/each}} 
    <button class="loadmore">Load More</button> 
    <template> 

Helper:

Template.Name.helpers({ 
    'list': function(){ 
    return Template.instance().list.get(); 
    } 
}) 

OnCreated:

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; 
     } 
    }); 
    } 
}); 
+1

Перед тем как вы получите сообщение об ошибке, вы можете показать нам, что такое "temp"? console.log() возможно. –

+0

@TimC. Спасибо за ваш повтор. Я исправил эту проблему. проблема в переменной temp не является массивом. –

ответ

2

Без выполнения кода я не могу точно сказать, что происходит, но может быть, что ваш начальный Meteor.call не устанавливает list как массив. Кроме того, temp объявлен без var, поэтому он протекает в глобальное пространство имен. В вашем обработчике событий вы можете попробовать написать следующее:

var temp = template.list.get() || []; 
temp.push(result); 
template.list.set(temp); 
+0

Спасибо за ваши усилия. Я исправил проблему. 'list' не является массивом, и я использовал' var' для объявления переменной temp :) –