2015-05-18 61 views
0

我正在使用ReactiveVar。 onCreated我設置了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> 

助手:

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

右鍵,你能告訴我們什麼是「臨時」的模樣? 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'來聲明臨時變量:) –

相關問題