我正在尝试创建一个动作数组。基本上这些是知道接下来要触发的函数的函数列表。我已经尝试了很多方法,但无法使它们可靠地工作。我正在做gui并且在他们完成工作时弹出框架回调(选择文件,编辑属性等)。
示例流程:
任务1:打开FileBrowser(iframe浏览控件),选中后,执行任务2 任务2:从FileBrowser获取值,打开iframe FileProperties。完成后执行任务3 任务3:获取FileProperties id,在页面控件中添加id
每个任务都必须等待上一个任务的回调。我对所有想法都持开放态度!唯一的一步是生成服务器端的步骤所以我需要避免硬编码!以下是我到目前为止的尝试!
感谢所有的想法。
FruitBat
/* action array */
var actions = new Array();
var data = {};
var op = function(fn, next, data) {
this.op = this;
this.fn = fn;
this.next = next;
this.data = data;
};
function one(myop) {
var op1 = myop;
var url = 'poptarget.aspx?cid=21&data=' + escape('[Id]=[2],[cid]=[3]');
var frame = $().popFrame('UniqueId', { caption: 'Page Item', url: url, width: 'auto', modal: true });
frame.bindEvent("cancelled saved", function(e, d) {
console.log('other');
callback();
});
frame.bindEvent("close", function(e, d) {
console.log('close');
op1.next.fn.call(op1.next);
});
};
function two(myop) {
console.log('woohoo');
};
actions.push(new op(one, two, null));
actions.push(new op(two, null, null));
var start = actions[0];
start.fn.call(start);
console.log(data);`
答案 0 :(得分:0)
我认为你错误地使用了.call()
。请参阅MDN doco on call。据我了解:
start.fn.call(start); // sets 'this' to start
将调用函数fn
并将其this
设置为引用start
,默认情况下会发生这种情况,因为您使用fn
中的点符号来调用start
1}}。在您的函数one()
中,您根本没有使用this
,而是使用了您似乎期望为start
的声明参数。尝试将该行更改为:
start.fn(start); // passes start as a parameter
同样在one()
函数中,您引用的callback()
似乎没有在任何地方定义。
答案 1 :(得分:0)
您是否查看过任何异步/流量控制库?例如,async提供了非常全面的将函数链接在一起的方法。