如何从appcelerator中的控制器传递数据

时间:2016-07-03 06:46:47

标签: javascript appcelerator-titanium appcelerator-alloy

我正在使用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的Save按钮,那么窗口的值将显示在Window1的表中

1 个答案:

答案 0 :(得分:0)

使用回调将数据传递回控制器并使用表视图是最干净的。

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范围内发生的事情