2010-02-24 8 views
9

gram z niepełną przykład znaleźć na http://www.w3.org/TR/offline-webapps/navigator.onLine

Ale jestem zakłopotany, aby zobaczyć komentarze w nim podoba:

"renders the note somewhere", and 
"report error", and 
"// …" 

Więc, czy ktoś mi pomóc napisać poprawny przykład? Oto co mam do tej pory:

<!DOCTYPE HTML> 
<html manifest="cache-manifest"> 
<head> 
<script> 
var db = openDatabase("notes", "", "The Example Notes App!", 1048576); 

function renderNote(row) { 
    // renders the note somewhere 
} 
function reportError(source, message) { 
    // report error 
} 

function renderNotes() { 
    db.transaction(function(tx) { 
    tx.executeSql('CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)', 
     []); 
    tx.executeSql(‘SELECT * FROM Notes’, [], function(tx, rs) { 
     for(var i = 0; i < rs.rows.length; i++) { 
     renderNote(rs.rows[i]); 
     } 
    }); 
    }); 
} 

function insertNote(title, text) { 
    db.transaction(function(tx) { 
    tx.executeSql('INSERT INTO Notes VALUES(?, ?)', [ title, text ], 
     function(tx, rs) { 
     // … 
     }, 
     function(tx, error) { 
     reportError('sql', error.message); 
     }); 
    }); 
} 


</script> 
<style> 
label { 
    display:block; 
} 
</style> 
</head> 
<body> 
<form> 
<label for="mytitle">Title:</label> 
<input name="mytitle"> 
<label for="mytext">Text:</label> 
<textarea name="mytext"></textarea> 
<!-- There is no submit button because I want to save the info on every keystroke --> 
</form> 
</body> 
</html> 

wiem też, że muszę włączyć ten gdzieś tam:

if (navigator.onLine) { 
    // Send data using XMLHttpRequest 
} else { 
    // Queue data locally to send later 
} 

Ale nie jestem pewien, co jeszcze chciałbym związać że zbyt.

+6

Odradzam zapisywanie w DB przy każdym naciśnięciu klawisza. Użyj setTimeout, aby wyzwolić zapis * n * sekund po tym, jak użytkownik zatrzymał swoje pisanie. W przeciwnym razie opóźnienie sieci spowoduje pisanie koszmaru. Ja, chciałbym umieścić save do obsługi onblur dla każdego wejścia. – Robusto

+0

Dzięki Robusto za komentarz. –

Odpowiedz

10

Wydaje mi się jak po czymś wzdłuż linii

function save() { 
    if (navigator.onLine) { 
     // Send data using XMLHttpRequest 
    } else { 
     // Queue data locally to send later 
    } 
} 

<textarea name="mytext" onkeyup="save();"></textarea> 

Należy jednak użyć limitu czasu, o którym mowa w Robusto (co, jak sądzę, jest również sposobem, w jaki GMail robi rzeczy).

Jeśli chodzi o "renderowanie notatki" itd., O którą się martwisz, ta część jest do wypełnienia. Musisz wypełnić to, wybierając dane z bazy danych, a następnie wypełniając je element na twojej stronie.

function renderNote(row) { 
    $('notes').innerHtml = $('notes').innerHtml + row.body; 
} 

To jest najlepsze, że mogę pracować z co spec obecnie mówi - uwaga jednak, że spec obecnie jest niekompletny i nie będzie w stanie znaleźć ostateczną wersję nim na w3 strona jeszcze.

Jeśli jesteś ciekawy, jak lokalnie umieścić w kolejce dane, nawet tablica powinna to zrobić. Przekaż każde lokalne żądanie na koniec tablicy (i prawdopodobnie zapisz ją lokalnie w tym samym czasie) i sprawdzaj okresowo pod kątem aktywnego połączenia internetowego. Jeśli połączenie internetowe jest dostępne, wielokrotnie usuwaj górny element z tablicy i wysyłaj ją przez sieć, dopóki tablica nie będzie pusta.

1

jeśli navigator.online mógłbyś zsynchronizować lokalną bazę danych z internetowym repozytorium, prawdopodobnie nie będziesz potrzebował "innego", ponieważ już przechowujesz lokalnie. może być jednak lepiej zamiast dodawać listy zdarzeń (w obiekcie okna) dla zdarzeń "offline" i "online" oraz wyzwalać (i anulować) synchronizację przy użyciu tych zdarzeń.

Wyjazd przykładem obsługi on this hacks.mozilla.org page i online/trybu offline spojrzeć na this ajaxian article about the webkit stickynotes html5-implementation (które nie są synchronizowane w trybie online choć)

+0

Ta strona zawiera tylko szczegóły dotyczące strony hacks.mozilla, używając pliku manifestu, a nie pełnej bazy danych sql do przechowywania w trybie offline. –

+0

w rzeczywistości używa localstorage do przechowywania lokalnej daty zamiast webdb (local sql db), ponieważ firefox nie działa i prawdopodobnie nigdy nie będzie (zobacz http://blog.futtta.be/2009/11/18/chrome-opera- to-support-html5-webdb-ff-ie-wont /) obsługuje webdb. – futtta