Appcelerator Titanium动态填充optionDialog

时间:2014-04-11 13:13:55

标签: titanium appcelerator titanium-alloy arraycollection

我是Titanium的新手,所以也许我的问题是新手问题,但我试图动态填充选项Dialog(使用Alloy框架)。 是否可以创建一个新的ArrayCollection并将其传递给我的optionDialog,如下所示:

<OptionDialog id="dialog" title="Choose Calendar" src=getAllCalendars>
        <Options>
            <Option id="{calendar_id}">{calendar_name}</Option>
        </Options>
   </OptionDialog>

其中getAllCalendar是一个返回新Array Collection的函数。

我知道我之前在Flex中做过类似的事情,但是我无法在Titanium上工作,所以也许它没有正确的方法。

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

您需要在Appcelerator(Alloy)中的js文件中编写代码。

通过这种方式,您可以轻松获得点击事件。

var dialog = Ti.UI.createOptionDialog({
        options : options,//Array
        title : 'Hi <?'
    });
    dialog.show();

    dialog.addEventListener('click', function(_d) {
        onclickactions[_d.index];
    });

答案 1 :(得分:0)

我想出了这个。如果您选择仅使用经典方法创建合金的对话框,则可以执行此操作。

对我来说,关键部分是使用我的选项数组保持选项的顺序。选择该选项后,您可以使用e.index引用options数组以查找已选择的选项。

function companyDialog(){
    // Build the list of options, maintaining the position of the options.
    if(Alloy.Globals.Form){
        Alloy.Globals.Form.Controller.destroy();
    }
        // My list of companies returns companyname, companycode, id
    companies = db.listCompanies();
    var options = [];

    _.each(companies, function(val){
        options.push(val.companyname + " (" + val.companycode + ")");
    });
    options.push("Cancel");

    var dialog = Ti.UI.createOptionDialog({
        title : 'Companies',
        options : options
    });

    dialog.addEventListener('click', function(e) {
        var setCode = "";
        var selection = "Unknown";
        if(options[e.index] != "Cancel") {
                    // DO WORK HERE.
                    alert(options[e.index].companyname);
        }
    });
    dialog.show();
}