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 это нормально-никто не запрещает оттуда вызывать функции определенные на глобальном уровне |
mitiya,
Юзайте FILE API :) |
Цитата:
|
vadim5june,
Да прост на мобилах пользуются именно им - поскольку и фото и музыка на туда же грузиться ... смысла юзать два метода ? |
Цитата:
Не вкурсе под какой версией и с каким браузером? |
Цитата:
блин может сделать внутри getData что-то вроде do {} while (obj.text == 'tt') я не понимаю почему вот тут obj = {text: 'tt'} ; getData(dataBase, "texts", "846847", function(elem) { alert('elem.text=' + elem.text); obj.text = elem.text; }); ничего не оправляется на глобальный уровень, ведь obj объявлен на глобальном уровне вроде как. |
Цитата:
|
Цитата:
и проверяйте при вызове лучший выход весь код поместить в callback или другие функции вызываемые из callback |
Цитата:
|
Цитата:
|
не пойму почему не работает
do {} while (obj.text == 'tt') внутри getData, зависает. |
поместил в callback обработчики кликов.
но в некоторых случаях происходит что callback вызывается когда он уже вызван, и в результате клики отрабатываются дважды, трижды и тд. Как бы мне при вызове callback прибить предыдущий вызванный callback ? |
Часовой пояс GMT +3, время: 20:39. |