2017-10-03 19 views
0

ノードアプリケーションを作成しているときに、グローバル変数の更新に問題があります。ここでロード機能がグローバル変数を更新しない

は私のコード(EJSファイル)である:

<% include ../partials/header %> 

    <div class="page container"> 
     <div id="campgroundsRow" class="row"> 
     </div> <!-- row end --> 
     <button id="loadMore">Load More</button> 
    </div> <!-- Container End --> 
    <% include ../partials/footer %> 

    <script> 
     var numGroundsToLoad = 1; 
     var numGroundsLoaded = 0; 

     loadCampgrounds(numGroundsLoaded, numGroundsToLoad); 

     function loadCampgrounds(numGroundsLoaded, numGroundsToLoad) { 
       var grounds = <%-JSON.stringify(campgrounds) %> 
       for(var i=numGroundsLoaded + 1; i<numGroundsLoaded + numGroundsToLoad; i++) { 
        //code to add grounds[i] to campgroundsRow div 
       } 
       numGroundsLoaded += numGroundsToLoad; 
     } 

     $("#loadMore").on("click", function() { 
       loadCampgrounds(numGroundsLoaded, numGroundsToLoad); 
     }); 
    </script> 

私がいる問題はloadCampgrounds機能が実際にnumGroundsLoadedを更新していないです。だから私は追加ボタンをクリックすると(#loadMore)、私は追加していると思う。ground[0].

私が望むのは、私がもっと負荷をクリックするたびに、次の地面が追加されるということです。つまり、デフォルトではground[0]が追加されます。その後、さらに多くの負荷で、ground[1]。その後、さらに多くの場合、ground[2]など(現在は無制限の根拠があるとします)。

ご覧のとおり、この問題は、スコープとスタッフの読み込みの両方に関連しています。

答えて

1

ローカル変数を更新するためです。この場合、グローバル変数を更新するには、window.numGroundsLoadedからアクセスする必要があります。

+0

それは完璧です。出来た。なぜあなたは説明できますか? (私はあなたの答えを受け入れていますが、それは10分待つと言います) – Asool

+0

ローカル変数に適用されるすべての変更が元の変数に適用されないためです。オブジェクトを渡しても、そのオブジェクトのプロパティは変更できますが、このオブジェクトへの参照は変更できません。この文書(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions)で説明しています。 – sergei