2012-04-06 91 views
0

我遇到了一個名爲returnDayNumber的全局方法的問題。如果我在我的Java腳本中調用該函數,它可以正常工作。但是當我做了一個按鈕來調用函數它說:「self.returnDayNumber不是一個函數」(認爲var self =這可能會解決問題)。 這裏是我的代碼:Java Script簡單函數調用(函數不在範圍內)

/* 
    * Global data 
    * used to centralize user data to be used in graphs 
    */ 
    var userModel = new userHealthModel(); 
    userModel.createUsers(); 

    userModel.addUser(); 


    var newChart = new NewHighCharts(); 

    returnDayNumber = function(month, day) 
    { 
     if(month==1) 
     { 
      return day; 
     } 
     else if(month==2) 
     { 
      return(31+day); 
     } 
     else if(month==3) 
     { 
      return(60+day); 
     } 
     else if(month==4) 
     { 
      return (91+day); 
     } 
     else if(month==5) 
     { 
      return(121+day); 
     } 
     else if(month==6) 
     { 
      return(152+day); 
     } 
     else if(month==7) 
     { 
      return(182+day); 
     } 
     else if(month==8) 
     { 
      return(213+day); 
     } 
     else if(month==9) 
     { 
      return(244+day); 
     } 
     else if(month==10) 
     { 
      return(274+day); 
     } 
     else if(month==11) 
     { 
      return(305+day); 
     } 
     else if(month==12) 
     { 
      return(335+day); 
     }   
    } 
    saveThis = function() 
    { 
     var self = this; 
     alert("your about to save!") 
     newChart.destroyChart(); 
     newChart= new NewHighCharts(); 
     var numberOfUsers = userModel.users().length; 
     var users = userModel.users(); 
     var weights = userModel.getWeights(); 
     var dates = userModel.getDates(); 
     var dataArray = []; 
     var xAndY = [] 
     var singleDate; 
     var name; 
     for(var i=0;i<numberOfUsers;i++) 
     { 
      name = users[i].name; 
      xAndY = []; 
      for(var x=0;x<dates.length-1;x++) 
      { 

       //extract month 
       var month = ([dates[i][x]].toString()).substring(0,2); 
       //extract day 
       day = parseInt(([dates[i][x]].toString()).substring(3,5)); 
       //add the day number and weight of users to an array of x and y coordinates 
       xAndY.push([self.returnDayNumber(month,day),weights[i][x]]) 
      } 
      newChart.addNewSeries(name,xAndY); 
     }  
    ///!!!!This works!!!/// 
    this.saveThis()//!!! 

    } 
    ko.applyBindings(userModel); 

我犯了一個KO用戶模型,但我不認爲它相關。這裏是我的HTML,注意它的KO語法,但它的工作原理。

<button data-bind="click: saveThis">Save</button> 

我很可能犯了一個簡單的錯誤或者超出了範圍。我是一個java腳本初學者,對於簡單的問題感到抱歉。非常感謝任何有用的程序員!

+1

此外,上述邏輯與閏年一起工作良好? – Ramesh 2012-04-06 03:40:22

+0

這裏有一個縮短returnDayNumber函數的方法: monthArray = new Array(0,0,31,60,91,121,152,182,213,244,274,305,335); returnDayNumber = function(month,day) { if(month == 1) return day; else if(month> 1 && month <= 12) return day + monthArray [month]; else return 0; } 你將不得不原諒缺乏格式;評論不允許代碼格式。 – Rhyono 2012-04-06 04:03:06

+0

@Rhyono您仍然可以使用刻度標記進行代碼格式化,例如'this'。 – mc10 2012-04-06 04:15:23

回答

1

移動var self = this;外面的你的saveThis功能不在裏面,這樣self是在正確的範圍內。

+0

這樣做了!非常感謝Stewe! – 2012-04-06 22:36:05