我在appcelerator工作室中构建应用程序并使用合金。
我想从我的控制器在TableView中插入数据。
所以这是我的 .xml 类
<Alloy>
<View class="container" >
<TableView id="table" class="table">
<TableViewSection id="table" >
</TableViewSection>
</TableView>
<!-- <Button id="button" onClick="doClick"></Button>-->
</View>
</Alloy>
这是我的控制器
的代码var view1 = Ti.UI.createView({
left : 0,
width : "35%",
top: "30px"
});
var view2 = Ti.UI.createView({
left : "35%",
width : "25%",
top: "30px"
});
var view3 = Ti.UI.createView({
left : "60%",
width : "25%",
top: "30px"
});
var view4 = Ti.UI.createView({
left : "85%",
width : "15%",
top: "30px"
});
view1.add(createHeader(L(lang+"social_history")));
view2.add(createHeader(L(lang+"start_date")));
view3.add(createHeader(L(lang+"end_date")));
view4.add(createHeader(L(lang+"quantity_um")));
var row = Ti.UI.createTableViewRow();
var rowData = [];
row.add(view1);
row.add(view2);
row.add(view3);
row.add(view4);
rowData.push(row);
$.table.data=rowData;
for(var i=0; i<3; i++){
var myRow = Ti.UI.createTableViewRow({
id: 'overview',
height: '47dip'
});
var myLabel = Ti.UI.createLabel({
text: 'Overview',
top: "0dip",
height: "47dip",
left: "5dip",
right: "5dip",
font: {
fontSize: "14dp",
fontWeight: "bold"
}
});
myRow.add(myLabel);
// this is working, but directly after displaying this row,
// the collection is overwriting it again
$.table.appendRow(myRow);
}
function createHeader(headerText){
var heading = Ti.UI.createView({
backgroundColor : "#0c7b84"
});
var headingText = $.UI.create("Label", {
classes: 'headerTableLabel'
});
headingText.text = headerText;
heading.add(headingText);
return heading;
}
现在在for循环中,我想在我的表中插入3行,但如果我尝试运行我的应用程序,我就看不到其他行。
我该如何解决?
答案 0 :(得分:2)
您应该尝试使用控制器而不是在JS中创建行,因为您使用的是Alloy,如:
row.xml
<Alloy>
<TableViewRow id="row">
<Label id="title"/>
<ImageView id="icon"/>
</TableViewRow>
</Alloy>
row.js
var args = arguments[0] || {};
$.row.myValue = args.title;
$.title.text = args.title;
$.icon.image = args.icon;
table.js
var data = [];
var yourArray = [
{title:'england',icon:'en.png'},
{title:'portugal',icon:'pt.png'},
{title:'france',icon:'fr.png'}
];
for(var i in yourArray) data.push(Alloy.createController('row',{
title:yourArray[i].title,
icon:yourArray[i].icon
}).getView());
$.table.setData(data);
当您添加行(appendRow)时,之前的TableView数据会消失吗?这很奇怪,你可以做一个解决方法:
data.push(Alloy.createController('row',{
title:'spain',
icon:'es.png'
}).getView());
//data.length = 4
$.table.setData(data);
获取行数据:
$.table.addEventListener('click',function(e) {
selected_index = e.index;
selected_row = e.row;
selected_my_value = e.row.myValue; //see the alloy row controller
});