2014-11-05 2 views
0

Я использую Titanium Alloy MVC с проектом, который необходимо сканировать QR-код Titanium SDK 3.4.0.GAрезультат Вернуться к контроллеру с другого контроллера Titanium Alloy

У меня есть 2 контроллера: index.js и secondwindow. js с их соответствующими представлениями index.xml и secondwindow.xml. мне нужно, чтобы начать сканирование и обрабатывать результат сканирования в secondWindow контроллера, и возвращает этот результат к контроллеру индекса, чтобы индекс обрабатывать его элементы пользовательского интерфейса

Im пытаясь что-то вроде этого index.xml:

<Alloy> 
    <Window> 
    <Label id='result' /> 
    ...Other components... 
    <Button onClick='startScan'>Start QR scan</Button> 
    </Window> 
</Alloy> 

index.js:

function whenSecondWindowFinish(arg){ 
    //update index.xml 
    $.result.setText(arg); 
} 

function startScan(e){ 
    Alloy.createController('secondWindow'); 
} 

$.index.open(); 



secondWindow.xml:

<Alloy> 
    <Window exitOnClose='false'> 
    </Window> 
</Alloy> 

secondWindow.js:

function scanOK(data){ 
var returnResult = /*Handle data*/ 
//I need to return the result to the index controller 
$.secondWindow.close();//And close this view 
} 

function canceled(){ 
//return {} to index controller 
$.secondWindow.close();//And close this view 
} 

var QRscanner = require('qrscanner'); 
var qroptions = { 
    //width height ... 
    success: scanOK, 
    cancel: canceled 
}; 
var qrview = QRscanner.createQRView(qroptions); 
$.secondWindow.add(qrview); 
$.secondWindow.open(); 


Как я могу закрыть это окно в успехе/отмена функции и возвращает результат к контроллеру индекса или извещать индекс для выполнения whenSecondWindowFinish (/ проход агд сканирования результат /); метод? Или это правильный способ сделать это?

+0

, что я понимаю, что вы хотите, чтобы отправить некоторый результат из '' secondWindow.js' к index.js' (я правильно?) И какой тип результата вы хотите отправить (String, object, other)? – turtle

ответ

1

Использовать обратный вызов.

index.js:

var callbackFunc = function(data){ 
    //do something with the data variable 
} 
Alloy.createController('secondwindow', {'callback':callbackFunc}); 

secondwindow.js:

var args = arguments[0] || {}; 

function scanOK(data){ 
    args.callback(data) 
//I need to return the result to the index controller 
$.secondWindow.close();//And close this view 
} 

Вы также можете использовать Ti.App.fireEvent, чтобы получить то же самое, но вот почему вы не должны: http://www.tidev.io/2014/09/10/the-case-against-ti-app-fireevent-2/ (о том, что ссылка также объясняет Callbacks тоже :)

0

Используйте этот один: -

activity.startActivityForResult(intent, function(e) { 
    // The request code used to start this Activity 
    var requestCode = e.requestCode; 
    // The result code returned from the activity 
    // (http://developer.android.com/reference/android/app/Activity.html#StartingActivities) 
    var resultCode = e.resultCode; 
    // A Titanium.Android.Intent filled with data returned from the Activity 
    var intent = e.intent; 
    // The Activity the received the result 
    var source = e.source; 
}); 

ИЛИ

Have a look here

Спартак Спасибо :)

+0

Спасибо, но мне нужен код для работы с iOS и Android, ваш код предназначен только для Android, я думаю, что буду использовать обратный вызов как метод параметров – RPAZ

Смежные вопросы