我正在开发钛制tableview。这里如果我选择任何一行,需要将行值从一个窗口传递到下一个窗口。
但是从我的代码中,
成功获取表行列表。行数据也通过了。
但是我遇到了一个问题。第一次点击一行意味着传递了空值。之后返回列表视图并单击另一行意味着先前选定的行ID将传递到下一个窗口。为什么我遇到此问题?这有什么问题?请给我一个解决方案。
我使用下面的代码:
dataArray = [];
for(var i=0; i<json.length; i++){
var row = Ti.UI.createTableViewRow({
className: 'row',
objName: 'row',
folder_id:json[i].folder_id,
layout : 'horizontal',
touchEnabled: true,
width: "100%",
height: Ti.UI.SIZE,
});
row.add(Ti.UI.createLabel({
text: json[i].folder_id,
title: json[i].folder_id,
left: 10,
top: 5,
width: 0,
visible : false,
font: { fontSize: '18dp' },
color: '#040404',
wordWrap: true,
height: Ti.UI.SIZE,
ellipsize: true
}));
row.add(Ti.UI.createLabel({
text: json[i].folder_name,
title: json[i].folder_name,
left: 10,
top: 5,
width: 100,
font: { fontSize: '18dp' },
color: '#040404',
wordWrap: true,
height: Ti.UI.SIZE,
ellipsize: true
}));
dataArray.push(row);
};
$.FoldertableView.setData(dataArray);
$.FoldertableView.addEventListener('click', function(e){
Ti.API.info("folder_id"+ e.rowData.folder_id );
var managereditfolder =Alloy.createController('editfolder').getView();
Ti.App.Properties.setString("folder_id", e.rowData.folder_id);
managereditfolder.open();
});
editfolder.js
folder_id = Ti.App.Properties.getString("folder_id");
Ti.API.info("Edit Folder folder_id"+ folder_id );
这里输出如下:
folder_id 14 [WARN]:为属性top自动指定的值无效 [INFO]:编辑文件夹folder_id null
folder_id 5 [WARN]:为属性top自动指定的值无效 [INFO]:编辑文件夹folder_id 14
请检查我的代码并给我一个解决方案
答案 0 :(得分:1)
您无需将数据保存到Ti.App.Properties
即可将其传递给其他视图控制器,您可以执行以下操作:
将数据传递给您创建的控制器
var managereditfolder = Alloy.createController('editfolder', { folderId: e.rowData.folder_id } ).getView();
在 editfolder.js 中,您将通过
收到文件夹ID// This holds all the Objects you pass along when
// creating the controller
var args = arguments[0] || {};
// Hence, your folderId is args.folderId
Ti.API.debug( args.folderId );
P.S.
不要忘记始终在您声明的任何新变量之前放置var
,否则您可能会遇到全局范围的问题!
答案 1 :(得分:0)
$.FoldertableView.addEventListener('click', function(e){
Ti.API.info("folder_id"+ e.rowData.folder_id );
var managereditfolder = Alloy.createController('editfolder').getView();
managereditfolder.folder_id = e.rowData.folder_id;
managereditfolder.open();
});
并在 editfolder.js 中,您可以通过
进行访问$.editFolderWin.folder_id