如何将变量添加到Alloy控制器中并在用户单击TableView

时间:2016-06-20 15:14:10

标签: javascript appcelerator appcelerator-alloy

我在appcelerator中构建了一个显示TableView的简单视图。我还在此表上添加了EventListener,因此如果用户单击此表的行,我可以使用其他(详细信息)行扩展此表。

现在这样可行,但我无法删除此详细信息行。

这是代码:

$.table.addEventListener("click", function(e){
    if(e.rowData.ignore){//empty row click
        console.log("Ignored");  
        return;//do nothing
    }
    //RECUPERO LA RIGA CHE HO CLICCATO
    var index = parseInt(e.index);//e callback is String, parse to int

    //VERIFICO SE QUESTA RIGA HA SOTTO RIGHE
    if( map[index] != null){
        //SIGNIFICA CHE QUESTA RIGA HA SOTTO RIGHE
        var newSubRow = Alloy.createController('familyHistory_row_children_header',{
            age:L(lang+"age"),
            diagnosi:L(lang+"diagnosis"),
            date_start:L(lang+"start_date"),
            date_end:L(lang+"end_date")
        }).getView();
        //CREO LA TESTATA DELLA SOTTO TABELLA
        $.table.insertRowAfter(index, newSubRow);
        arrayItems.forEach(function (item, i, array) {
            var subItem = Alloy.createController('familyHistory_row_children',{
                age:item.age,
                diagnosi:item.diagnosi,
                date_start:item.dateStart,
                date_end:item.dateEnd
            }).getView();
            $.table.insertRowAfter(1+index+i, subItem);
        });
    }
});

familyHistory_row_children_header.js

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

$.age.text = args.age;

$.diagnosi.text = args.diagnosi;

$.date_start.text = args.date_start;

$.date_end.text = args.date_end;

familyHistory_row_children.js

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

$.age.text = args.age;

$.diagnosi.text = args.diagnosi;

$.date_start.text = args.date_start;

$.date_end.text = args.date_end;

我认为如果可以在 familyHistory_row_childre_header.js 中添加其他变量,那么当我插入详细信息行时,我可以设置此参数= true(例如)并在监听器中实现如果parameteri = true然后删除详细信息行。

这样做可能吗?

1 个答案:

答案 0 :(得分:0)

我不确切地理解你想要什么,但你可以将事件作为参数传递,或者将函数和属性设置为行的顶层

index.js

$.table.hideRowChildren = function(start,end) {

    //remove or hide the row
};

familyHistory_row_childre_header.js

$.row.myHeader = false;

$.row.setMyHeader = function(val) {

    $.row.myHeader = val;

    if(val) args.hideRowChildren(args.myFirstChildrenRow,args.myLastChildrenRow);
};

当您点击familyHistory_row_children_header时,要显示其familyHistory_row_children,您可以这样做:

$.table.addEventListener('click',function(e) {

    e.row.myHeader = true;

    //or

    e.row.setMyHeader(true);
});