函数通过循环迭代,一次又一次,但是再也不会起作用

| 我正在调用Titanium模式窗口,然后运行一个循环遍历某些数据的函数; 视窗1:
var win = Ti.UI.createWindow({
    url: \'window2.js\'
    modal: 1
});
win.open();
窗口2 :(从窗口1调用)
win = Ti.UI.currentWindow;

function doLoop() {
    Ti.API.info(\'doLoop fn called\');
    // I\'ve tracked the issue down to here
    var m = 0;
    for(var i in list) { m++; }

    Ti.API.info(m);
    Ti.API.info(\'finished\');
}

win.addEventListener(\'open\', function() {
    // list is dynamically generated and passed through successfully from window1.js
    doLoop();
});
每次成功调用doLoop(),每次成功调用list。 首次运行时,它运行完美。第二次(不是第一次)运行需要一定时间才能暂停并运行循环,但是m从未递增?循环暂停后,输出“已完成”。 有任何想法吗?
function buildMediaItemsSelectionTable() {
    var mediaCount = 0, i;

    for(i in mediaItemsSelectionList[0]) { mediaCount++; }

    for(i=0,l=mediaCount;i<l;i++) {
        addMediaItemsSelectionSongsRow(i);
    }
}
    
已邀请:
我在这里看到几个问题。 首先,您的
buildMediaItemsSelectionTable()
函数存在的问题 您的for..in循环可能会捕获您没有的对象属性 不需要双循环 这是适当的修改
function buildMediaItemsSelectionTable()
{
  var i = 0, p;

  for ( p in mediaItemsSelectionList[0] )
  {
    if ( mediaItemsSelectionList[0].hasOwnProperty( p ) )
    {
      addMediaItemsSelectionSongsRow( i++ );
    }
  }
}
另一个问题是由于您未提供足够的代码而不得不猜测的问题。我假设您正在通过Titanium的变量转发将ѭ5传递给模态。也许是这样的?
var win = Ti.UI.createWindow({
    url:   \'window2.js\'
  , modal: 1
  , list:  [1,2,3]
});
而且必须反复打开模式,对吗?也许一个按钮
var button = Ti.UI.createButton( {title: \'Modal\'} );
Ti.UI.currentWindow.add( button );

button.addEventListener( \'click\', function()
{
  win.open();
});
但是根据您的描述,ѭ5发生了变化,因此让我们制作一个随机列表生成器并将其插入到我们的页面中,这样整个过程看起来像这样
var win = Ti.UI.createWindow({
    url:   \'window2.js\'
  , modal: 1
  , list:  randomList()
});

var button = Ti.UI.createButton( {title: \'Modal\'} );
Ti.UI.currentWindow.add( button );

button.addEventListener( \'click\', function()
{
  win.open();
});

function randomList()
{
  // Random return an array with 3, 5, or 7 items
  return [[1,2,3],[1,2,3,4,5],[1,2,3,4,5,6,7]][Math.floor(Math.random()*2)];
}
这怎么了不管您打开模态多少次,“ 10”仅被调用一次。即使window1是导航或选项卡组的一部分,创建模态窗口的代码在任何情况下都不会重新执行。 如果您希望每次都将新列表转发到模式,则每次都必须重新生成它
button.addEventListener( \'click\', function()
{
  win.list = randomList();
  win.open();
});
    
看来您的\'} \'错误位置。现在,您有一个带有单个(可能是意外的)副作用的循环-m计数到列表的长度,然后调用具有列表长度的API.info。 您可能想要:
function doLoop() {
    Ti.API.info(\'doLoop fn called\');
    // I\'ve tracked the issue down to here
    var m = 0;
    for(var i in list) { 
        m++;

       Ti.API.info(m);
       Ti.API.info(\'finished\');
    }
}     

要回复问题请先登录注册