2012-04-06 2 views
0

returnDayNumber라는 전역 메소드에 문제가 있습니다. 내 자바 스크립트 내에서 함수를 호출하면 잘 작동합니다. 하지만 버튼을 만들어 함수를 호출 할 때 : "self.returnDayNumber는 함수가 아닙니다."(var self = this가 문제를 해결할 수 있다고 생각했습니다). 자바 스크립트 간단한 함수 호출 (범위에없는 함수)

/* 
    * 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> 

메신저 아마도 간단한 실수를하거나 무언가가 범위를 벗어납니다. 인스턴트 메신저 자바 스크립트 초급 그래서 간단한 질문에 대한 미안 해요. 유용한 프로그래머에게 많은 감사를드립니다!

+1

또한 위의 논리는 윤년으로 잘 작동합니까? – Ramesh

+0

returnDayNumber 함수를 단축하는 방법은 다음과 같습니다. monthArray = new Array (00316091121152182213244274305,335); returnDayNumber = function (월, 일) { if (월 == 1) 반환 일; else if (월> 1 && 월 <= 12) 반환 일 + monthArray [month]; else return 0; } 서식이 부족할 수 있습니다. 주석은 코드 형식을 허용하지 않습니다. – Rhyono

+0

@Rhyono 'this'와 같이 코드 서식에 눈금을 사용할 수 있습니다. – mc10

답변

1

saveThis 외부의 var self = this; 기능이 내부에 없으므로, self이 올바른 범위에 있습니다.

+0

이것은 대접을했다! 대단히 stewe 고마워! –

관련 문제