Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   executeAsync, SQLite, Firefox extension (https://javascript.ru/forum/css-html-firefox-mizilla/13718-executeasync-sqlite-firefox-extension.html)

a.malitsky 10.12.2010 16:20

executeAsync, SQLite, Firefox extension
 
Не могу передать в объект результаты работы внутри функции executeAsync:
function virt(){
//блаблабла
this.getDb = function (id){
var statement = db.createStatement("SELECT * FROM `table` WHERE r_id=:id;");
statement.params.id=id;
statement.executeAsync({
	handleResult: function(aResultSet){
	var row=aResultSet.getNextRow();
	this.r_id=row.getResultByName("r_id");},
	//row (или r_id) надо передать наружу - в объект, частью которого является данная функция
	handleError:,//функция из примера ниже
	handleCompletion://функция из примера ниже   
	});
alert(this.r_id);//undefined (для row - тоже самое)
}}

Задача - прочитать строку БД и передать полученный массив(спец объект) в объект virt. Eval и window.row не работают - вылетает ошибка NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN. Всё это в плагине (сайдбар) для FF. Пытался передавать и строки (свойства объекта row).

Спецификация фунцкции executeAsync и пример её использования.

Чувствую что упускаю что-то глобальное и(но) очевидное - помогите найти. Если сам же положил грабли и не могу обойти - толкните в нужном направлении. Спасибо!

a.malitsky 11.12.2010 19:00

Решилось передачей значения в функцию того же объекта.

comp3v 23.02.2011 23:16

Цитата:

Сообщение от a.malitsky (Сообщение 83374)
Решилось передачей значения в функцию того же объекта.

а можно поподробнее, с примером кода, как решили проблему?
спасибо.

a.malitsky 24.02.2011 07:58

Запрос:
this.db2form = function (id){
	var statement = as.db.createStatement("SELECT * FROM `table` WHERE id=:id;")
	statement.params.id = id
	statement.executeAsync({
		handleResult: function(aResultSet){virt.db2virt(aResultSet);},//обращение через глобальную переменную
		handleError: function(aError) {print("Error: " + aError.message);},
		handleCompletion: function(aReason) {virt.virt2form()}
		})
	}

Обработка результата:
this.db2virt = function (res){
	row = res.getNextRow();
	for (var i = 0; i<this.fields.length; i++)
		this.fields[i].fromDB(row.getResultByName(this.fields[i].dbName))		
	}

После завершения обработки:
this.form2virt = function(){ for (var i=0; i<this.fields.length; i++) this.fields[i].fromForm() }

Все функции - методы объекта Virt.

comp3v 24.02.2011 23:37

ок, спасибо!


Часовой пояс GMT +3, время: 15:49.