我在javascript函数中创建一个原型窗口。在窗口中我加载了一个用户必须选择的网站。我希望javascript函数等到用户选择了某个东西,然后返回用户选择的值。
function showTargetDirectoryChooser(){
var win = new Window( 'dirchooser_' + new Date().getTime() , {className: 'alphacube', width: 320, height: 470, url: '/directories/choose', maximizable: false});
win.showCenter();
win.setDestroyOnClose();
// WAIT_UNTIL( win.content.contentWindow.Directory != null )
return win.content.contentWindow.Directory
}
我找到了here我可以使用的东西 - 但我不明白如何......
答案 0 :(得分:1)
这是一个异步过程;用回调来处理这个问题可能更好。
例如,你不能使用closeCallback吗?
function showTargetDirectoryChooser(done){
var win = new Window( 'dirchooser_' + new Date().getTime() , {className: 'alphacube', width: 320, height: 470, url: '/directories/choose', maximizable: false});
win.showCenter();
win.setDestroyOnClose();
// This will ensure
win.setCloseCallback(function () {
done(win.content.contentWindow.Directory);
return true; // or return false if you don't want the window to be closed
});
return true;
}
有了这个,你就会改变
var chosenDir = showTargetDirectoryChooser();
// do something with chosen directory
到
var chosenDir;
showTargetDirectoryChooser(function (directory) {
chosenDir = directory;
// do something with the chosen directory
});
答案 1 :(得分:0)
一种选择是使用事件处理程序。当通过单击或更改事件设置Directory
时,如果触发了该事件,请附加一个处理该事件的处理程序并将其传递回主窗口中的函数。这将需要使您的代码异步 - 这样您就有一个调用showTargetDirectoryChooser()
的调用者和一个将目录结果作为单独函数的回调。不过,在那里重新构建代码并将其分解为调用者和回调应该不会太复杂。
您还可以使用setTimeout并轮询win.content.contentWindow.Directory
的内容,如下所示:
function showTargetDirectoryChooser(){
var win = new Window( 'dirchooser_' + new Date().getTime() , {className: 'alphacube', width: 320, height: 470, url: '/directories/choose', maximizable: false});
win.showCenter();
win.setDestroyOnClose();
setTimeout("pollDirectory()", 500); // poll in a half second
}
function pollDirectory() {
if(win.content.contentWindow.Directory != null) {
callback(win.content.contentWindow.Directory); // you will need an asynch callback
} else {
setTimeout("pollDirectory()", 500); // poll in a half second
}
}
这样做也要求您的代码是异步的。
另一种选择是查看jquery wait,但这是一个超时而不是等待条件。或者有一组reactive extensions to JS,但这对你正在做的事情来说似乎有些过分。但是,观察的概念可能是你想要研究的东西。