2015-12-15 71 views
0

嗨夥計試圖讓一個簡單的setintervel工作,每分鐘自動刷新我的數據。遇到問題的線IM是這樣的:KNockout JS - 自動重新加載ajax調用

setInterval(incidentViewModel.fetchdata,60000); 

我也試過這樣:

window.setInterval(incidentViewModel.fetchdata,60000); 

這兩個給我同樣的錯誤:

Uncaught TypeError: self.incidents is not a function 

林沒有看到任何明顯這是造成這個問題,任何人有任何想法?

這裏是我的全碼:

function IncidentViewModel() { 
    var self = this; 
    self.incidents = ko.observableArray(); 
    self.currentIncident = ko.observable(); 
    self.showModal = ko.observable(false); 

    self.fetchdata = function() { 
    Incident.BASE_URL = '../../../../_vti_bin/listData.svc/GDI_PROD_Incidents'; 
    Incident.CREATE_HEADERS = {"accept": "application/json;odata=verbose"}; 
    Incident.UPDATE_HEADERS = {"accept": "application/json;odata=verbose","If-Match": "*"}; 

    var self = this; 
    $.getJSON(Incident.BASE_URL+filterlist+orderlist, 
     function(data) {   
      if (data.d.results) {  
       self.incidents(data.d.results.map(function(item) { 
       return new Incident(item); 
       })); 
       $('#loading').hide("slow"); 
       $('#IncidentTable').show("slow"); 
      } else { 
        console.log("no results received from server"); 
       } 
     }).fail(function() { 
      console.log("error", params, arguments); 
    }); 
    console.log("Im done fetching data, pheww!"); 
    } 
} 

function DataItem(data) { 
    //console.log(data); 
    this.Name = ko.observable(data.Name); 
    this.Price = ko.observable(data.Price); 
} 

function Incident(data) { 
    var self = this; 
    self.ID = data.ID; 
    self.Description = ko.observable(data.Description); 
    self.Composante = ko.observable(data.Composante); 
    self.Incident = ko.observable(data.Incident); 
    self.ÉtatValue = ko.observable(data.ÉtatValue); 
    self.PrioritéValue = ko.observable(data.PrioritéValue); 
    self.Duré = ko.observable(data.Duré); 
    self.Date_de_début = ko.observable(data.Date_de_début); 
    self.Date_de_fin = ko.observable(data.Date_de_fin); 
    self.Groupe_Support_Prime = ko.observable(data.Groupe_Support_Prime); 
    self.Autres_Groupe_Support_Prime = ko.observable(data.Autres_Groupe_Support_Prime); 
    self.ResponsableValue = ko.observable(data.ResponsableValue); 
    self.Impact = ko.observable(data.Impact); 
    self.Temps_Consacré = ko.observable(data.Temps_Consacré); 
    self.Type_de_tempsValue = ko.observable(data.Type_de_tempsValue); 
    self.Journal_des_actions = ko.observable(data.Journal_des_actions); 
    self.Dépanage = ko.observable(data.Dépanage); 
    self.Journal_des_actions = ko.observable(data.Journal_des_actions); 
    self.Suivi = ko.observable(data.Suivi); 
    self.Ressources = ko.observable(data.Ressources); 
} 

var incidentViewModel = new IncidentViewModel(); 
ko.applyBindings(incidentViewModel); 
setInterval(incidentViewModel.fetchdata,60000); 

回答

1

self.fetchdata函數內部取出var self = this;因爲你應該指self.incidents()時指IncidentViewModel函數內部的自我。

+0

...因爲據我瞭解,當你調用'setInterval'時,你的'incidentViewModel.fetchdata'函數的作用域將是window對象而不是'incidentViewModel'。 –

+0

刪除var self = this;爲我做了詭計。十分感謝大家! –