0

我想一个简单的字符串传递给一个事件监听器,以确定适当的数组对象进行修改。通过查看日志(显示在注释中),我明白我所传递的是一个对象,它不能直接与另一个对象的属性进行比较。简单的JavaScript对象比较

我应该传递一个具有字符串作为属性的对象吗(比如数组对象),还是有一种更适合的方式来引用对象作为字符串或以某种方式调用其名称(如日志在第一评论)?

// 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 
     } 
    } 
}); 

谢谢!

回答

2

对我来说,看起来timestampID传递给处理程序是一个对象,但是从第二条语句(以及附带的[INFO]注释),我完全不知道它具有什么属性。我们假设它有一个名为timestamp的属性。然后你if的说法应该是

if (myArray[i].timestampID === timestampID.timestamp) 

但是,这就是所有我可以从这个代码片段恐怕搜集。

UPDATE:OK,我看你是如何触发事件。 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... 
    } 
} 

});

+0

什么是timestamo?你的意思是时间戳吗? – ThiefMaster 2011-06-10 22:26:22

+0

我想传递的只是作为参数的时间戳(我只是选择称它为时间戳ID)。除了字符串之外,我不需要发送任何其他属性。它在其他地方工作,我接收timestampID并将其作为字符串使用,但是“if”比较严格地将其识别为对象。 – 2011-06-10 22:31:20

+0

@ThiefMaster。好,找到我了。 – jmbucknall 2011-06-10 22:46:41

0

无论是写一个比较函数或发现你要比较的标量属性(数字或字符串)。