如何解决函数通过循环迭代,一次又一次,但是再也不会起作用
| 我正在调用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\',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,3],[1,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\');
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。