2012-04-06 22 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