使用 Appcelerator 更新动态创建的 ImageView
Updating a dynamically created ImageView with Appcelerator
我正在尝试做一些我认为很简单的事情,但在 iOS 使用 Titanium 5.2.2 SDK 时遇到了一些问题。
所以,我有一个应用程序可以从应用程序外部托管的 JSON 文件中提取员工列表,我将所有这些数据缓存在板载数据库中,并为我内部的每个员工创建一个蒙版图像循环。
employeeImage[i] = Titanium.UI.createMaskedImage({
mask : employee_image, // background image
tint: 'black',
mode : Titanium.UI.iOS.BLEND_MODE_COLOR,
width: 210,
height: 210,
touchEnabled: false,
custom_employee_id: employee_id
});
我需要能够引用该图像并将色调从 'black' 更新为我应用中其他地方的 'else',这样我就不必经常查找和刷新每一张图片。
我想做这样的事情:
// get the employee status
var db = Ti.Database.open('Enter');
var getEmp = db.execute('SELECT employee_id, employee_status FROM Employee');
while (getEmp.isValidRow())
{
var empID = getEmp.fieldByName('employee_id');
var empStatus = getEmp.fieldByName('employee_status');
Ti.API.info(empID + ' ' + empStatus);
// update the images correctly
if (empStatus == 0) {
// update the image mask to black if they are now out of the building
Ti.API.info('Status is zero');
//employeeImage[i].tint = 'black';
} else {
// update the image mask to transparent if they are now in the building
Ti.API.info('Status is ONE');
//employeeImage[i].tint = 'transparent';
}
getEmp.next();
}
getEmp.close();
db.close();
问题是,如果它具有动态名称,我不知道是否可以将这些更改设置到图像视图。
如果它只是被称为 employeeImage1,这将很容易。但是,如果我尝试调用 employeeImage1 而不是 employeeImage[i],我会收到此错误。
"Can't find variable: employeeImage1";
我该如何解决这个问题?
有什么想法吗?
毫无疑问,您可以将对象存储为数组元素。我已将您的样本缩减为以下测试用例:
(function(){
var count=10;
var i=0;
var employeeImage=[];
for (i=0;i<10;i++){
employeeImage[i]=Ti.UI.createButton({
title : "Employee " + i
});
}
for (var i=0;i<10;i++){
console.log(employeeImage[i].title);
}
})()
此输出是您所期望的:
[INFO] Employee 0
[INFO] Employee 1
[INFO] Employee 2
[INFO] Employee 3
[INFO] Employee 4
[INFO] Employee 5
[INFO] Employee 6
[INFO] Employee 7
[INFO] Employee 8
[INFO] Employee 9
现在,作为数组元素,您应该将其称为 employeeImage[n] 而不是 employeeImageN,因为 employeeImageN 不存在,存在的是对存储为数组元素的对象的引用。
这是否有意义。
R
我正在尝试做一些我认为很简单的事情,但在 iOS 使用 Titanium 5.2.2 SDK 时遇到了一些问题。
所以,我有一个应用程序可以从应用程序外部托管的 JSON 文件中提取员工列表,我将所有这些数据缓存在板载数据库中,并为我内部的每个员工创建一个蒙版图像循环。
employeeImage[i] = Titanium.UI.createMaskedImage({
mask : employee_image, // background image
tint: 'black',
mode : Titanium.UI.iOS.BLEND_MODE_COLOR,
width: 210,
height: 210,
touchEnabled: false,
custom_employee_id: employee_id
});
我需要能够引用该图像并将色调从 'black' 更新为我应用中其他地方的 'else',这样我就不必经常查找和刷新每一张图片。
我想做这样的事情:
// get the employee status
var db = Ti.Database.open('Enter');
var getEmp = db.execute('SELECT employee_id, employee_status FROM Employee');
while (getEmp.isValidRow())
{
var empID = getEmp.fieldByName('employee_id');
var empStatus = getEmp.fieldByName('employee_status');
Ti.API.info(empID + ' ' + empStatus);
// update the images correctly
if (empStatus == 0) {
// update the image mask to black if they are now out of the building
Ti.API.info('Status is zero');
//employeeImage[i].tint = 'black';
} else {
// update the image mask to transparent if they are now in the building
Ti.API.info('Status is ONE');
//employeeImage[i].tint = 'transparent';
}
getEmp.next();
}
getEmp.close();
db.close();
问题是,如果它具有动态名称,我不知道是否可以将这些更改设置到图像视图。
如果它只是被称为 employeeImage1,这将很容易。但是,如果我尝试调用 employeeImage1 而不是 employeeImage[i],我会收到此错误。
"Can't find variable: employeeImage1";
我该如何解决这个问题?
有什么想法吗?
毫无疑问,您可以将对象存储为数组元素。我已将您的样本缩减为以下测试用例:
(function(){
var count=10;
var i=0;
var employeeImage=[];
for (i=0;i<10;i++){
employeeImage[i]=Ti.UI.createButton({
title : "Employee " + i
});
}
for (var i=0;i<10;i++){
console.log(employeeImage[i].title);
}
})()
此输出是您所期望的:
[INFO] Employee 0
[INFO] Employee 1
[INFO] Employee 2
[INFO] Employee 3
[INFO] Employee 4
[INFO] Employee 5
[INFO] Employee 6
[INFO] Employee 7
[INFO] Employee 8
[INFO] Employee 9
现在,作为数组元素,您应该将其称为 employeeImage[n] 而不是 employeeImageN,因为 employeeImageN 不存在,存在的是对存储为数组元素的对象的引用。
这是否有意义。
R