2014-10-30 2 views
0

콘솔의 함수가 정의되지 않은 이유를 모르겠습니다. 나는 그것을 올바르게 만들려고 노력했지만 나는 그것을 얻을 수없는 것 같습니다. 그것은 setInterval 함수를 사용하려고 시도 할 때까지 제대로 작동합니다. 또한 빌드가 계속해서 세미콜론이 누락되었다고 말하지만, 나는 그것을 보지 못합니다.자바 스크립트 콘솔에 함수가 정의되어 있지 않습니다.

$(document).ready(function() { 

    var machineDataViewModel = { 
     machineDataItems: ko.observableArray([]), 

     loadMachineDataItems: function DataLoad() { 

      machineDataViewModel.machineDataItems.length = 0; 

      $.getJSON("http://localhost/JsonRestful/Service1.svc/GetMachineData", function (data) { 


       $.each(data.GetMachineDataResult, function (index, item) { 
        machineDataViewModel.machineDataItems.push(new machineDataModel(item)); 

       }); 
      }); 
     } 
    }; 

    ko.applyBindings(machineDataViewModel); 

    machineDataViewModel.loadMachineDataItems(); 
    setInterval(DataLoad, 9000); 
}); 

function machineDataModel(item) { 
    this.mach_no = ko.observable(item.mach_no), 
    this.VAR1 = ko.observable(item.VAR1), 
    this.VAR2 = ko.observable(item.VAR2), 
    this.VAR3 = ko.observable(item.VAR3), 
    this.VAR4 = ko.observable(item.VAR4) 
}; 
+1

을, 변수 "코"규정 할 수 없다. "machineDataModel"에서 "this.VAR4"로 시작하는 줄은 세미콜론으로 끝나야합니다. – Kolban

+0

@ ray9209 - 네, 너무 기능입니다. 함수 참조를 포함하는 속성입니다. – jfriend00

+0

모든 this.XXXX ....와 쉼표는 의미가 없습니다. 쉼표를 사용해야하는 이유는 없습니다. 일반적으로 var xxx, xxxx, xxxxx는 아닙니다. 무늬. – epascarello

답변

3

당신은 DataLoad() 기능에게 당신이 방법을 정의하고 당신의 setInterval()에 출시 될 것으로 예상 할 수 없다. 그렇게 간단하게 작동하지 않습니다. DataLoad 기호는 해당 기능의 범위 내에서만 사용할 수 있습니다.

setInterval(machineDataViewModel.loadMachineDataItems, 9000); 

여기에 당신이처럼 함수의 이름을 지정하고 그 범위를 벗어난 그 이름을 사용하는 기대할 수 없다 보여주는 간단한 데모입니다 : 그 대신, 당신이 그것을 호출 할 수 있습니다 http://jsfiddle.net/jfriend00/6t0pp60s/ (볼 디버그 콘솔에서 볼 오류). 당신은 (나는 실제로 당신을 생각하지 않는다) this의 오른쪽 값을 갖도록 함수가 필요한 경우


참고로, 당신은 끝에 세미콜론 (이런 식으로 부를 것이다 모든 라인) : 세미콜론 문제에 관해서는

setInterval(machineDataViewModel.loadMachineDataItems.bind(machineDataViewModel), 9000); 

this.VAR4 할당 라인에 jsHint 포인트. 나는 (당신에게 jsHint에서 건강 진단서를 제공합니다) 이것에 machineDataModel()을 변경하는 게 좋을 것 : 당신의 코드에서

function machineDataModel(item) { 
    this.mach_no = ko.observable(item.mach_no); 
    this.VAR1 = ko.observable(item.VAR1); 
    this.VAR2 = ko.observable(item.VAR2); 
    this.VAR3 = ko.observable(item.VAR3); 
    this.VAR4 = ko.observable(item.VAR4); 
} 
+0

'setInterval (function() {machineDataViewModel.loadMachineDataItems()}, 9000);'제안하고'bind'를 가능한 단축키로 언급하는 것이 더 유익해야합니다. jsHint를 가져 오는 것이 좋습니다. 누군가가 그것을 사용하기 시작할수록 JS의 삶이 더 좋아질 것입니다. – Keen

+0

@Cory - 나는 .bind()에 대해 교육할만한 가치가 있다고 생각했다. 그 전에 함수 스텁이 왜 추천 될지 확신 할 수 없습니까? – jfriend00

+0

'bind'에 대해 배우는 사람은 처음에 동일한 작업을 수행하는보다 자세한 코드를 보면 더 잘 이해할 수 있습니다. (이상하게도, 변수의 이름은 너무 길어서 함수 표현식이 실제로 덜 * 상세하게 표현되지만 실제로는 결정적인 요소는 아닙니다.) – Keen

관련 문제