我正在调用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()并且每次成功调用列表。
第一次运行它完美无缺。第二个(任何不是第一个)时间运行需要时间来暂停和运行循环,但m永远不会增加?循环输出'完成'暂停后。
有什么想法吗?
function buildMediaItemsSelectionTable() {
var mediaCount = 0, i;
for(i in mediaItemsSelectionList[0]) { mediaCount++; }
for(i=0,l=mediaCount;i<l;i++) {
addMediaItemsSelectionSongsRow(i);
}
}
答案 0 :(得分:2)
我在这里看到了几个问题。
首先,buildMediaItemsSelectionTable()
功能的问题
以下是适当的修改
function buildMediaItemsSelectionTable()
{
var i = 0, p;
for ( p in mediaItemsSelectionList[0] )
{
if ( mediaItemsSelectionList[0].hasOwnProperty( p ) )
{
addMediaItemsSelectionSongsRow( i++ );
}
}
}
另一个问题是我不得不猜测,因为你没有提供足够的代码。我假设您正在使用Titanium的变量转发将list
传递给模态。也许是这样的?
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();
});
但根据你的描述,list
会发生变化,所以让我们制作一个随机列表生成器并将其插入我们的页面,这样整个事情就像这样
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)];
}
这里有什么问题?无论你打开模态多少次,randomList()
只被调用一次。即使window1是导航或制表符组的一部分,创建模态窗口的代码也不会在任何情况下重新执行。
如果您希望每次都将新列表转发到模态,则每次都必须重新生成
button.addEventListener( 'click', function()
{
win.list = randomList();
win.open();
});
答案 1 :(得分:0)
看起来你的'}'在错误的地方。现在你有一个带有单个(可能是非预期的)副作用的循环 - 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');
}
}