Как передать данные из контроллера в appcelerator
Я создаю приложение с appcelerator.
У меня есть Window1.js. В этом окне пользователь может увидеть TableView с несколькими строками. Если пользователь нажимает кнопку, появляется другое окно (socialHistory_modal.js) как модальное. В socialHistory_modal пользователь компилирует форму. Затем, если пользователь нажимает кнопку "Сохранить", я хочу получить информацию из формы и показать ее в таблице.
Так что это код Window1.js
// Arguments passed into this controller can be accessed via the `$.args` object directly or:
var args = $.args;
var lang = Alloy.Globals.LANG;
var langDefault = Alloy.Globals.LANG_DEFAULT;
function openModal(e){
Alloy.createController("socialHistory_modal", args).getView().open();
}
Window1.xml
<Alloy>
<View class="containerClinicalFolder" >
<TableView id="table" class="table" onClick="doClick">
<TableViewSection id="table" >
</TableViewSection>
</TableView>
<Button id="button" class="buttonLanguage" onClick="changeLanguage"
visible="false" traduzione="true"></Button>
<ImageView class="buttonAdd" onClick="openModal"></ImageView>
</View>
</Alloy>
socialHistory_modal.xml
<Alloy>
<Window id="modal_add_edit" onClose="cleanup" modal="true">
<View class="container">
<Label id="title" class="title"/>
<View class="separator"></View>
<TableView id="table" height="Titanium.UI.SIZE" layout="vertical">
<TableViewRow class="menu_item" top="25">
<Label id="description" class="label" left="12" />
<Picker id="picker" left="20" selectionIndicator="true">
<PickerColumn id="column1">
<PickerRow title="Esposizione Tossica"/>
<PickerRow title="Stato civile"/>
<PickerRow title="Diet"/>
</PickerColumn>
</Picker>
</TableViewRow>
<TableViewRow class="menu_item" top="25">
<Label id="quantity" class="label"left="12" />
<TextField id="textQuantity" borderStyle="Ti.UI.INPUT_BORDERSTYLE_ROUNDED"
width= "250" height= "60"></TextField>
</PickerColumn>
</Picker>
</TableViewRow>
</TableView>
<View class="separator"></View>
<TableView id="tableButton" width="Titanium.UI.FILL" layout="horizontal">
<TableViewRow class="menu_item" top="25">
<Button id="buttonClose" class="buttonClose" onClick="onClose" ></Button>
<Button id="buttonSave" class="buttonSave"></Button>
</TableViewRow>
</TableView>
</View>
</Window>
</Alloy>
Поэтому я хочу, чтобы, если пользователь нажал кнопку "Сохранить" в socialHistory_modal, в таблице Window1 отобразилась область формы.
1 ответ
Использование обратного вызова для передачи данных обратно в контроллер с табличным представлением является самым чистым.
window1.js
function openModal(e){
Alloy.createController("socialHistory_modal", {args:args, callback: mycallback).getView().open();
}
function mycallback(e){
// do something with the data you sent back from the modal
}
socialHistory_modal.js
function onClose() {
// do your local stuff
if (args.callback $$ (typeof args.callback === 'function)) {
args.callback({the: stuff, you:wantToPassBack});
}
}
Вы также можете использовать диспетчер магистрали, чтобы запустить событие, которое запускает что-то, что происходит в области Window1.js.