mitiya,
Есть еще File Api для мобилок http://habrahabr.ru/post/139492/ http://habrahabr.ru/company/microsof...6158/#habracut |
Цитата:
|
вот что мне удалось сделать
var dataBase = "TextsDB" ;
$.indexedDB(dataBase, {
schema: {
"1": function(versionTransaction){
var texts = versionTransaction.createObjectStore("texts", {
"keyPath": "hash"
});
texts.createIndex("hash");
}
}
}).then(console.info, console.error);
addData(dataBase, "texts", { hash: '846847', text: 'jhklj'})
getData(dataBase, "texts", "846847");
function addData(db, oS, obj) {
var transaction = $.indexedDB(db).objectStore(oS);
transaction.add(obj);
}
function getData(db, oS, hash) {
var out
$.indexedDB(db).objectStore(oS).get(hash).done(function(elem){
out = elem;
alert('out=' + out.text);
});
return out
}
собственно с грехом пополам работает создание базы, добавление туда записи. и даже получение работает, но почему-то алерт показывает то что нужно только внутри функции а ретурнить то что мне надо не хочет, |
Цитата:
вот здесь на сайте мозиллы https://developer.mozilla.org/en-US/docs/IndexedDB написано что в настоящее время работает только асинхронная версия API indexedDB а синхронная пока не работает ни в одном браузере Note: The synchronous APIs of IndexedDB have not yet been implemented in any browser. В асинхронных процессах мы не можем выполнить return а используем callback напишите function getData(db, oS, hash,callback) ......get(hash).done(callback)... |
я если честно в асинхронном программировании ничего не понимаю.
можно поподробней ? |
Цитата:
что хотел дальше сделать? Использовать в какой то функции? Напиши ее еcли она есть а мы ее запустим как callback |
мне нужно тест запихнуть в свойство объекта что бы потом в разных местах с ним работать. пытаюсь сделать так :
obj = {text: 'tt'} ;
getData(dataBase, "texts", "846847", function(elem) {
alert('elem.text=' + elem.text);
obj.text = elem.text;
});
alert('obj.text=' + obj.text);
function getData(db, oS, hash, callback) {
$.indexedDB(db).objectStore(oS).get(hash).done(callback);
}
в результате alert('elem.text=' + elem.text); // нужный текст выдает а alert('obj.text=' + obj.text); // выдает tt , то-есть старое значение. я так понимаю, что дело в том что ответ на функцию getData приходит позже чем вызов alert('obj.text=' + obj.text); но мне то все равно нажо получить этот текст в obj.text |
Цитата:
getData(dataBase, "texts", "846847", function(elem) {
ff(elem)
});
function ff(el){
var obj={text:el.text} ;
//здесь код в котором используется obj
}
|
но все-равно все будет по сути внутри коллбэка ?
а нельзя как-то при вызове getData заставить скрипт ждать прихода результата ? мне грубо говоря нужно закэшировать этот текст, потому как с ним ного каких операций дальше будет производиться, и каждый раз запрашивать его в этом асинхронном режиме из базы совсем не хочется. |
Цитата:
то что будет внутри callback это нормально-никто не запрещает оттуда вызывать функции определенные на глобальном уровне |
| Часовой пояс GMT +3, время: 18:00. |