2015-03-13 37 views
0

我有一個兩頁cordova應用程序,第一個有一個搜索字段,第二個顯示第一個結果。 的displayResults功能科爾多瓦SQLite插件只適用於第一個電話

function displayResults(){ 
    var query = localStorage.getItem('search'); 
    var db = window.sqlitePlugin.openDatabase({name:"Store-DB", location: 1}); 
    queryDB(db,query); 
    } 

function queryDB(db,query){ 
    db.transaction(function(tx) { 
      var queryList = query.split(" "); 
      var sqlText = "SELECT * FROM DB WHERE item LIKE '%"+queryList[0]+"%'"; 
      for (i = 1; i < queryList.length; i++) { 
        sqlText += " OR item LIKE '%"+queryList[i]+"%'"; 
      } 
      tx.executeSql(sqlText, [], querySuccess); 
     } 
     ); 
    } 

function querySuccess(tx,results) { 
    var i; 
    var len = results.rows.length; 
    //Iterate through the results 
    for (i = 0; i < len; i++) { 
     console.log(row); 
     //Get the current row 
     var row = results.rows.item(i); 
     var div = document.createElement("div"); 
     div.style.background = "gray"; 
     div.style.color = "white"; 
     div.innerHTML = row; 

     document.body.appendChild(div); 
    } 
    alert("Finished"); 
} 

這裏是第二個頁面的代碼:

<link rel="stylesheet" type="text/css" href="css/default.css"> 
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
    <script src="js/zepto.js" type="text/javascript"></script> 
    <script src="plugins/com.brodysoft.sqlitePlugin/www/SQLitePlugin.js" type="text/javascript"></script> 
    <script src="js/code.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     function onLoad(){ 
      document.addEventListener("deviceready", onDeviceReady(), false); 
     } 
     function onDeviceReady(){ 
      displayResults(); 
     } 
    </script> 

    </head> 
    <body onload="onLoad()"> 
     <div id="taskbar"> 
      <a href="index.html">Home</a> 
      <a id="username" class="toolbar_item" style="float:right;" href="#"></a> 
     </div> 

第一次加載該頁面displayResults作品就好了,但如果你點擊鏈接返回到主頁並再次加載第二頁,控制檯打印錯誤ReferenceError: no "undefined" has no property "openDatabase"換句話說,SQLite插件沒有加載。但是,如果我讓displayResults火按鈕按下而不是onload它每次都有效。這種特殊行爲的解釋是什麼?

+0

一個原因可能是onload事件是這個插件完全加載之前過早地打響了答案。我只是在離子框架中讀到這樣的錯誤,但這也可能是一個原因。 – Blauharley 2015-03-13 18:22:04

+0

@Blauharley是的,這幾乎肯定是問題,我知道,但我該如何解決它? I.E.在插件加載之前,我怎麼才能啓動事件? – 2015-03-13 18:38:09

+0

我看到您的cordova.js腳本位於brodysoft插件腳本之上,值得嘗試切換其位置。建議將cordova.js放在頁面文件的底部 – Blauharley 2015-03-13 18:49:18

回答

1

似乎有些設備準備事件或者根本沒有被觸發,或者當存在更多不同庫的事件處理程序時被觸發得太早。第二個問題導致brodysoft插件未正確加載並作爲window.sqlitePlugin屬性分配給窗口對象,因爲一個事件處理程序調度了deviceready事件太早。原來的setTimeout是因爲它已經here

0

可以使用onpageshow事件例如

$('#idofyourpage').bind("onpageshow",function(){ 
    //Do something 
});