我正在尝试将一个简单的字符串传递给事件侦听器,以便识别要修改的适当数组对象。我理解通过查看日志(在注释中显示)我传递的是一个对象,它不能直接与另一个对象的属性进行比较。
我应该传递一个具有字符串作为属性的对象(就像数组对象那样),或者是否有更合适的方式将对象作为字符串引用或以某种方式调用其名称(就像第一个中的日志一样)评语)?
// I just want to pass a string as an argument. Here is a static example.
var timestampID = '1307740835264';
Ti.App.fireEvent('confirmation',timestampID);
注意第一个日志输出如何将参数解释为字符串,但if
比较将其识别为对象。
Ti.App.addEventListener('confirmation',function(timestampID) { // produces "[DEBUG] fire app event: confirmation with 1307740835264"
Ti.API.info(timestampID); // produces "[INFO] { type = confirmation; }"
for (i=0;i<myArray.length;i++) {
Ti.API.info(myArray[i].timestampID + ' | ' + timestampID); // produces "[INFO] 1307740835264 | [object Object]"
if (myArray[i].timestampID == timestampID) { // will produce false
// will never happen
}
}
});
谢谢!
答案 0 :(得分:2)
所以对我来说,传递给处理程序的timestampID
看起来像是一个对象,但是从第二个语句(和伴随的[INFO]注释),我完全不知道它有什么属性。我们假设它有一个名为timestamp的属性。那么你的if
陈述应该是
if (myArray[i].timestampID === timestampID.timestamp)
但这就是我可以从这段代码中收集到的所有内容。我很害怕。
更新:好的,我知道你是如何触发这个事件的。 Titanium API在这一点上令人费解(看起来help for fireEvent是错误的:两个参数叫做“name”?)。没有我能看到的例子。但是它确实说你传入的数据是(必须?)序列化为JSON。
现在我知道了,看看第二个语句的[INFO]行,它更有意义。它是一个包含JSON数据的字符串。您的数据丢失,因为它是一个字符串值。试试这个:
Ti.App.fireEvent('confirmation', { timestampID: '1307740835264' } );
,这在事件处理程序中:
Ti.App.addEventListener('confirmation', function (data) {
for (i=0;i<myArray.length;i++) {
if (myArray[i].timestampID === data.timestampID) {
...code...
}
}
});
答案 1 :(得分:0)
编写比较函数或查找要比较的标量属性(数字或字符串)。