2012-02-27 68 views
1

我有一個頁面,我正在使用JQuery Mobile。我很難理解何時我的變量可見。我認爲以下內容被加載到同一個內存空間。但是我得到一個錯誤。在我解釋的錯誤讓我告訴代碼:JQuery Mobile - JavaScript可見性

page.html中

<html> 
    <head> 
    <script type="text/javascript" src="app.js"></script> 
    </head> 

    <body> 
    <div id="myPage" data-role="page"> 
     <div data-role="header"> 
     <h1>My App</h1> 
     </div> 

     <div data-role="content"> 
     <div class="ui-grid-a"> 
      <div class="ui-block-a"><input type="button" value="First" onclick="return button1_Click();" /></div> 
      <div class="ui-block-b"><input type="button" value="Second" onclick="return button2_Click();" /></div> 
     </div> 
     </div> 

     <script type="text/javascript"> 
     var currentIndex = 0; 
     function button1_Click() { 
      alert(myCollection.length); 
     } 

     function button2_Click() { 

     } 
     </script> 
    </div> 
    </body> 
</html> 

App.js

$("#myPage").live("pagecreate", function() { 
}); 

$("#myPage").live("pagebeforeshow", function() { 
}); 

$("#myPage").live("pageshow", function() { 
    var myCollection = loadCollection(); 
    function loadCollection() { 
    // do stuff 
    } 
}); 

當我點擊了 「第一」 的按鈕,我的事件處理程序被調用。不過,我收到以下錯誤:

的ReferenceError:MyCollection的是沒有定義

我的問題是我如何可以共享這兩個文件之間的變量?我還擔心名稱衝突,這就是爲什麼我希望以下面我嘗試的方式分享內存空間的原因。我究竟做錯了什麼?

謝謝。

回答

1

myCollection定義在回調函數的範圍內,因此只存在於該回調函數內。它不在這個範圍之外。如果您希望全局可用,則必須將其定義爲全局變量,而不是函數範圍。

您在app.js中的代碼也應該用$(document).ready()包圍,因爲您試圖在DOM存在之前引用DOM。