Первый элемент для добавления в мобильную базу данных не добавляется

Я использую JayData в мобильном приложении платформы Telerik. Хорошие люди в JayData разработали этот пример того, что я хотел сделать:

http://jsfiddle.net/JayData/zLV7L/

 var savefeedIfNotExists = function (feed) {
            //create jQuery promise
            console.log("create deferred for " + feed.FeedID)

            var def = new $.Deferred();

            //async thread 
            pnrDB.PNRFeeds.filter('it.FeedId == ' + feed.FeedID).count(function (count) {

                console.log("Add Feed - " + feed.FeedName);

                if (count == 0) {
                    var f = new PNRFeed({
                        FeedId: feed.FeedID,
                        FeedName: feed.FeedName,
                        ImageName: feed.ImageName,
                        FeedActive: feed.IsActive,
                        OrderNumber: parseInt(feed.OrderNumber) + 1
                    })

                    pnrDB.PNRFeeds.add(f);

                    console.log("Resolve for - " + feed.FeedName);
                    //promise.resolve() indicates that all async operations have finished
                    //we add the ADD/SKIP debug info to the promise
                    def.resolve("ADD");

                    console.log("Resolved - " + feed.FeedName);
                } else {
                    //console.log('feed id not 0 - ' + f.FeedId);
                    def.resolve("SKIP");
                }
            });
            //return promise in order to wait for the async result of local database query
            return def.promise();
        };

Я добавил в этот код, но когда я запустил его, также используя свой модуль Kendo.js для JayData (отличный от kendo.js от кендо), он, кажется, прерывает script, когда создается первое обещание в функции цикла. Это происходит только в первый раз, когда запускается script - если вы должны обновиться, чтобы выполнить перезагрузку, он запускается правильно, и первый элемент встает.

enter image description here

На втором загрузке он работает отлично, без вызова своего модуля JayData для Kendo:

enter image description here

Итак, хотя кажется, что он собирается добавить первый элемент (ID 19), этот элемент никогда не добавляется в базу данных. Однако при повторной загрузке одного и того же точного script он помечается как добавление снова и не прерывается, поэтому он, наконец, попадает в базу данных.

У кого-нибудь есть мысли или вещи, чтобы попробовать?

Ответ 1

если вы используете html5, то вы можете использовать webSQL для выполнения операций с данными, он предоставляет все функции, такие как выбор, вставка, обновление данных Спецификация Web SQL определяет API для хранения данных в базах данных, которые могут быть запрошены с использованием варианта SQL.

вы можете использовать как следующую функцию, которую я использовал в своем мобильном приложении Intel XDK

if you are using html5 then you can use webSQL to perform data operations,it provides all functions like select,insert,update on data 

> The Web SQL specification defines an API for storing data in databases
> that can be queried using a variant of SQL. you can use like following
> function

<!-- begin snippet: js hide: false -->
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function insert(){
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
db.transaction(function (tx) {
 var nam = document.getElementById("Tname").value;
 var id = document.getElementById("Tid").value;
 var name2 = "velocity";
  tx.executeSql('CREATE TABLE IF NOT EXISTS APP (id unique, log)');
  tx.executeSql('INSERT INTO APP (id, log) VALUES (?,?)',[id,nam]);
  //tx.executeSql('INSERT INTO LOGS (id, log) VALUES (61,'+name2+')');
  msg = '<p>Log message created and row inserted.</p>';
  document.querySelector('#status').innerHTML =  msg;
});
}
function readdata(){
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var id = document.getElementById("Tid").value;
db.transaction(function (tx) {
  tx.executeSql('SELECT * FROM APP', [], function (tx, results) {
  console.log("All rows:");
   var len = results.rows.length, i;
   msg = "<p>Found rows: " + len + "</p>";
   document.querySelector('#status').innerHTML +=  msg;
   for (i = 0; i < len; i++){
     msg = "<p><b>Name :-" + results.rows.item(i).log +"<br/>Contact :-" +results.rows.item(i).id + "</b></p>";
     msg = "<p><b>Name :-" + results.rows.item(i).log +"<br/>Contact :-" +results.rows.item(i).id + "</b></p>";
	 //var row = result.rows.item(i);
     //msg = console.log("  " + row.contact + " " + row.nam);
	 document.querySelector('#status').innerHTML +=  msg;
   }
 }, null);
});
}
function ByContact(){
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var con = document.getElementById("Con").value;
db.transaction(function (tx) {
  tx.executeSql('SELECT * FROM APP WHERE (id LIKE ?);',[con], function (tx, results) {
  console.log("All rows:");
   var len = results.rows.length, i;
   msg = "<p>Found rows: " + len + "</p>";
   document.querySelector('#status').innerHTML +=  msg;
   for (i = 0; i < len; i++){
     msg = "<p><b>Name :-" + results.rows.item(i).log +"<br/>Contact :-" +results.rows.item(i).id + "</b></p>";
     msg = "<p><b>Name :-" + results.rows.item(i).log +"<br/>Contact :-" +results.rows.item(i).id + "</b></p>";
	 //var row = result.rows.item(i);
     //msg = console.log("  " + row.contact + " " + row.nam);
	 document.querySelector('#status').innerHTML +=  msg;
   }
 }, null);
});
}

</script>
</head>
<body style="background-image:url('f.jpg');background-repeat:no-repeat;">
<h1 align="center"><font color="white">Contact Form</font></h1>
    <div  style="color:white">
<table align="center">
<tr>
<td>contact no</td>
<td><input type="text" id="Tid"/></td>
</tr>
<tr>
<td>Name</td>
<td><input type="text" id="Tname"/></td>
</tr>
<tr>
<td>
<button id="add" onclick="return insert();">Insert</button>
</td>
<td>
<button onclick="return readdata();" id="read">readdata</button>
</td>
<td>
</td>
</tr>
</table>
<table>
<tr>
    <td>
    <button onclick="return ByContact();" id="GetByContact">GetByContact</button>
    </td>
    <td>
    <input type="text" id="Con"/>
    </td>
</tr>

        </table>
        <div id="status" name="status"><font color="white">Your Data Will Show Here</font></div>
</div>       

    </body>
</html>