>

그래서 저는 통계 앱을 만들고 있고 쉽게 사용할 수 있도록 많은 기능을 사용하고 있습니다. 다른 위치에 대한 통계가 있고 터치 다운과 같은 다른 통계가 있기 때문입니다. 쿼터백 섹션에서 작업 한 후 반복되기 때문입니다. 문제는 이것입니다 ... 처음 통계를 클릭하면 터치 다운이라고하면 잘 작동합니다. 나는 뒤로 화살표를 사용하고, 완료라고 말하면 여전히 잘 작동합니다. 그런 다음 모든 플레이어를 한 번에 표시 할 수 없기 때문에 다음 버튼이 있습니다. 그것은 올바른 것을로드하지만 통계를 변경하고 이유를 모르겠습니다. 다른 통계를 시도하면 다음을 클릭하면 통계가 두 번 변경되므로 루프 오류라고 가정합니다

코드를 살펴보고 레딧에게 물어 봤습니다. 답글이 없습니다

var Players = [];
var list = [];
var count = 0;
// So the code below organizes players by stats. 
// For example, if you call touchdowns, it'll organize from most touchdowns to lowest.
function myFunction(Position, Stat, startingpoint, endingpoint) {
  readRecords(Position, {}, function(records) {
    var temp = 0;
    var name = "";
    for (var i = 0; i < records.length; i++) {
      for (var j = i + 1; j < records.length; j++) {
        if ((records[i])[Stat] < records[j][Stat]) {
          temp = records[i][Stat];
          name = records[i].Player;
          (records[i])[Stat] = (records[j])[Stat];
          records[i].Player = records[j].Player;
          records[j][Stat] = temp;
          records[j].Player = name;
        }
      }
      insertItem(Players, i, (records[i]).Player + " : " + (records[i])[Stat] + " " + Stat + "\n");
    }
    for (var k = startingpoint; k < endingpoint; k++) {
      appendItem(list, Players[k]);
      var x = list.join(" ");
    }
    setText("label2", x);
    for (var l = endingpoint; l >= startingpoint; l--) {
      removeItem(list, Players[l]);
    }
  });
}
// So I made this part cause I thought let's say I had 60 players, and 20 players per page. 
// How would the program know if I wanna see players 0-20 or 20-40 if I click previous? 
// It's to organize that based on a count variable that changes when you click back and forward.
onEvent("button1", "click", function() {
    count = count + 1;
});
onEvent("button2", "click", function() {
    count = count - 1;
});
// And this was supposed to call back my original function to organize stats when I click the next or previous button. 
// Guess this is where my problem is.
function callback(Stats) {
    count = 0;
    setText("label2", "");
    onEvent("button1", "click", function() {
        if (count == 1) {
            myFunction("Quarterbacks", Stats, 40, 69);
        }
    });
    onEvent("button2", "click", function() {
        if (count == 0) {
            myFunction("Quarterbacks", Stats, 0, 40);
        }
    });
}
// Quarterback stats
onEvent("QuarterBackmenu", "change", function() {
    setScreen("OffenseStatScreen");
    if (getText("QuarterBackmenu") == "Touchdowns") {
        setText("label2", "");
        myFunction("Quarterbacks", "Touchdowns", 0, 40);
        setText("QuarterBackmenu", "Quarterback");
        callback("Touchdowns");
    } else if ((getText("QuarterBackmenu") == "Completions")) {
        setText("label2", "");
        myFunction("Quarterbacks", "Completions", 0, 40);
        setText("QuarterBackmenu", "Quarterback");
        callback("Completions");
    }
});

따라서 적절한 통계를 순서대로 표시 할 것으로 기대합니다. 쿼터백에서 통계를 처음 선택하면 작동합니다. 다른 것을 선택하면 작동하지만 다음을 클릭하면 올바른 통계가 표시되지만 빠르게 변경됩니까? 다시 시도하면 두 번 변경됩니까? 그리고 여기 내 프로그램을 사용하고 볼 수있는 링크가 있습니다. 따라서 공격, 쿼터백으로 이동하여 통계를 선택하고 뒤로 화살표를 사용하여 다른 통계를 확인한 후 다음을 클릭하십시오

https://studio.code.org/projects/applab/cHpi9aqp6p_aJHJHJDJHJ3

  • 답변 # 1

    callback 함수를 호출 할 때마다  추가 이벤트 핸들러를 추가하고 있습니다.

    function callback(Stats) {
        count = 0;
        setText("label2", "");
        onEvent("button1", "click", function( ) {
            if (count == 1) {
                myFunction("Quarterbacks", Stats, 40, 69);
            }
        });
        onEvent("button2", "click", function( ) {
            if (count == 0) {
                myFunction("Quarterbacks", Stats, 0, 40);
            }
        });
    }
    
    

    아마도 onEvent 를 이동해야합니다  통계를 전달하는 방법이있는 함수 외부의 핸들러 :

    var Stats;
    function callback(stats) {
        count = 0;
        setText("label2", "");
        Stats = stats
    }
    onEvent("button1", "click", function( ) {
        if (count == 1) {
            myFunction("Quarterbacks", Stats, 40, 69);
        }
    });
    onEvent("button2", "click", function( ) {
        if (count == 0) {
            myFunction("Quarterbacks", Stats, 0, 40);
        }
    });
    
    

  • 답변 # 2

    많은 코드가 누락 된 것 같지만,이 코드를 살펴보면 문제의 원인이 될 수있는 반 패턴을 볼 수 있습니다.

    function callback(Stats) {
        count = 0;
        setText("label2", "");
        onEvent("button1", "click", function() {
            if (count == 1) {
                myFunction("Quarterbacks", Stats, 40, 69);
            }
        });
        onEvent("button2", "click", function() {
            if (count == 0) {
                myFunction("Quarterbacks", Stats, 0, 40);
            }
        });
    }
    
    

    언제나 callback  이 함수는 button1 를위한 두 개의 새로운 이벤트 핸들러를 생성합니다.  그리고 button2 . 당신은 callback 를 호출  코드에서 여러 번, 그래서 프로그램이 실행됨에 따라 아마도 myFunction("Quarter... 를 실행하기 위해 싸우는 수백 개의 처리기가 끝날 것입니다.

    그러나 코드에는 다른 문제도 있습니다. 해야 할 일에 따라 함수의 이름을 지정하는 것이 좋습니다. 예를 들어, 나는 어떤 myFunction 를 모른다  또는 callback  하세요.

    시작하면서, 프로그램의 각 부분이 무엇을해야하는지 간략하게 설명하는 작은 사양 문서를 작성하십시오. 여기에서 작성할 함수, 호출해야하는 기능 및 프로그램 수명주기의 어느 시점을 결정할 수 있습니다.

    코드가 조직없이 유기적으로 성장해 왔다는 느낌이 들었습니다. 아무 문제가 없지만 아마도 구조와 징계를 추가해야 할 때입니다.

관련 자료

  • 이전 android - AsyncTask를 사용하여 XML을로드하는 동안 오류가 발생 함
  • 다음 jmsserializerbundle - symfony 42와 함께 JMSSerializer를 사용하는 방법