Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问TableView的自定义行_Javascript_Arrays_Titanium_Element - Fatal编程技术网

Javascript 访问TableView的自定义行

Javascript 访问TableView的自定义行,javascript,arrays,titanium,element,Javascript,Arrays,Titanium,Element,我将项目推送到数据数组中,然后将它们添加到rowData数组中,以便为表创建自定义行。我需要知道当用户单击特定行时如何访问这些。我以前使用e.rowData、title等来访问这些元素,当时我有一个基本表,但现在它是一个自定义表,这不起作用。不要担心解析位,这一切都很好。感谢大家的帮助 data.push({ title: items.item(i).getElementsByTagName("title").item(0).text,

我将项目推送到数据数组中,然后将它们添加到rowData数组中,以便为表创建自定义行。我需要知道当用户单击特定行时如何访问这些。我以前使用e.rowData、title等来访问这些元素,当时我有一个基本表,但现在它是一个自定义表,这不起作用。不要担心解析位,这一切都很好。感谢大家的帮助

data.push({

            title: items.item(i).getElementsByTagName("title").item(0).text,            
        leftImage: str.match(patt1) !== null ? str.match(patt1)[0] : 'image_news.png',
            dataToPass: items.item(i).getElementsByTagName("description").item(0).text,
            hasChild: true, 
            js:"external.js"
        });



    }

    var rowData=[];

    for(i=0;i<data.length;i++){
        var img= Titanium.UI.createImageView({
            image:data[i].leftImage,
            left:0,
            bottom:5,
            height: 100,
            width: 100
        });

        var bgBar=Titanium.UI.createView({
            height:110,
            width: "100%",
            bottom:0,
            left:0,
            backgroundColour: "#000",
            opacity: 0.6
        });

        var title=Titanium.UI.createLabel({
            text:data[i].title,
            color: 'black',
            left: 105
        });

        var row=Titanium.UI.createTableViewRow({
            height: "auto",
            hasChild: "true",
        js:"external.js",
        dataToPass: data[i].dataToPass
        });

        row.add(img);
        row.add(bgBar);
        row.add(title);



        rowData.push(row);
        console.log("row shiznick" + rowData);
    }


    tableView.setData(rowData);


tableView.addEventListener("click", function (e){
        console.log("HERE SOURCE.TITLE ------------------"+e.row.title);
        console.log("YOYOOYOYO------------"+e.source.title);
        console.log("IS THIS IT---------------"+e.children[0]);
        console.log("HERE IS THE SOURCE -----------------------------"+ e.source);
        console.log("HERE SOURCE.LEFTIMAGE REG EXP3 ------------------"+e.row.leftImage);
        console.log("HERE SOURCE.ClassName ------------------"+e.source.className);
        console.log("HERE HASCHILD ------------------"+e.rowData.hasChild);
        console.log("HERE DATATOPASS ------------------"+e.row.dataToPass);
});
data.push({
标题:items.item(i).getElementsByTagName(“标题”).item(0).text,
leftImage:str.match(patt1)!==null?str.match(patt1)[0]:“image\u news.png”,
dataToPass:items.item(i).getElementsByTagName(“说明”).item(0).text,
hasChild:是的,
js:“external.js”
});
}
var rowData=[];

对于(i=0;i尝试使用event.taget函数,类似于:

$(".row").click(function(event) {
  var element = event.target;
  // Accessing element
});

设置表的行有两种方法,您可以创建自定义行,也可以创建具有行对象属性的JSON对象。这两种情况都有不同的访问行的方法,即
对象或
行数据
对象:

当使用JavaScript字典对象隐式创建行时,使用[rowData属性]而不是row来访问任何自定义行属性。 下面是一个隐式创建行的示例,这不是推荐的方法

在您的示例中,由于您没有隐式地创建行对象,而是显式地创建行对象,因此您可以从事件的
row
属性访问单击的行,如下所示:

tableView.addEventListener("click", function(e){
    // Get the [TableViewRow](http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.TableViewRow) object
    var theRow = e.row;
    // Get the children
    var rowChildren = theRow.children;
    // Here are your objects in the row
    var imgInRow = rowChildren[0];
    var bgBarInRow = rowChildren[1];
    var titleInRow = rowChildren[2];
    // Here is the title
    var rowTitle = titleInRow.text;
});
tableView.addEventListener("click", function(e){
    // Get the index of the row
    var ndx = e.index;
    // Get the row, this only works if you have not added sections
    var row = tableView.data[ndx];
});
或者,在这两种情况下,您可以始终使用索引查找行对象,如下所示:

tableView.addEventListener("click", function(e){
    // Get the [TableViewRow](http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.TableViewRow) object
    var theRow = e.row;
    // Get the children
    var rowChildren = theRow.children;
    // Here are your objects in the row
    var imgInRow = rowChildren[0];
    var bgBarInRow = rowChildren[1];
    var titleInRow = rowChildren[2];
    // Here is the title
    var rowTitle = titleInRow.text;
});
tableView.addEventListener("click", function(e){
    // Get the index of the row
    var ndx = e.index;
    // Get the row, this only works if you have not added sections
    var row = tableView.data[ndx];
});

为了在用户单击时访问行的数据(即使是自定义行中未显示的数据),您可以创建一个数组,在循环期间将数据推入其中,并使用e.index访问它。 一个简单的代码示例:

    var allDataArray = [];

        // loop through each item
        for ( var i = 0; i < items.length; i++ )
        {
            // Your source datas (custom row : id is not displayed in the rows)
            var sourceData = {
                id: items.item(i).getAttribute('id'),               
                title: items.item(i).getElementsByTagName("title").item(0).textContent,
            };

            // Saving data for each loop
            allDataArray.push(sourceData);
}

不,它是javascript,正在访问dom属性。这导致应用程序崩溃。我没有收到任何特定的错误消息。您可以制作JSFIDLE来观察正在发生的事情。OP要求的是Tianium,而不是jQuery,Tianium中没有dom,这将不起作用。@Hernandcb我不能为Tianium项目制作JSFIDLE非常感谢您的响应。我的唯一的问题是我不确定如何访问dataToPass。我尝试了var dataToPassInRow=rowChildren[3];和dataToPassInRow.text但这会导致错误?我想这是因为我没有像其他属性那样添加此属性。我缺少什么吗?为了访问映像,我尝试了console.log(imgInRow.text),它返回undefined.console.log(imgInRow.image),但返回了undefined.console.log(imgInRow.image)[object imageView]我尝试了console.log(imgInRow.image.text),返回的是unfinedhmm e.rowData似乎适用于dataToPass。这令人困惑。我仍然无法获取图像,尽管将图像像dataToPass一样附加到行,然后像
e.rowData.image那样获取图像