ecomfe / ef

ef is a integration framework with er & esui
14 stars 15 forks source link

问题探讨关于ActionPanel.action #43

Open uraincay opened 9 years ago

uraincay commented 9 years ago

有没有可能继承ER的promise风格,actionPanel在render之后有一个actionPromise属性,方便用户可以用promise风格去把异步过程串联下去。毕竟用callback的方式还是很不方便的。 现在actionPanel在render之后,action type取决于action初始化时机,开始是一个Promise,之后又变成了Action.

// 现在只能这么写
var actionPanel = ui.create('ActionPanel', options);
actionPanel.render();
var actionPromise = actionPanel.action;
actionPanel.on('actionloaded', function(){
    var actualAction  = actionPanel.action;
    // do something else...
});

// 期待这种风格
actionPanel.action.then(function(actualAction){
    // do something else...
})
otakustay commented 9 years ago

这里确实有问题,ESUI设计之初是没有任何异步在里面的,当时的社区在Promise模型上非常不成熟(不然ER也不会折腾出个如此不标准的Deferred了),而ESUI还在callback、event和promise之间犹豫

这直接导致,ESUI除非有很大的破坏性更新(不向前兼容),不然是做不出render方法异步的了

Best regards

Gray Zhang

在 2015年3月21日 下午2:49:06, uraincay (notifications@github.com) 写到:

有没有可能继承ER的promise风格,actionPanel在render之后有一个actionPromise属性,方便用户可以用promise风格去把异步过程串联下去。毕竟用callback的方式还是很不方便的。 现在actionPanel在render之后,action type取决于action初始化时机,开始是一个Promise,之后又变成了Action.

// 现在只能这么写 var actionPanel = ui.create('ActionPanel', options); actionPanel.render(); var actionPromise = actionPanel.action; actionPanel.on('actionloaded', function(){ var actualAction = actionPanel.action; // do something else... });

// 期待这种风格 actionPanel.action.then(function(actualAction){ // do something else... })

—
Reply to this email directly or view it on GitHub.
otakustay commented 9 years ago

具体你可以在ef项目下找一个issue,有提到怎么把ActionPanel这一类整进ER的流程去……

Best regards

Gray Zhang

在 2015年3月21日 下午2:49:06, uraincay (notifications@github.com) 写到:

有没有可能继承ER的promise风格,actionPanel在render之后有一个actionPromise属性,方便用户可以用promise风格去把异步过程串联下去。毕竟用callback的方式还是很不方便的。 现在actionPanel在render之后,action type取决于action初始化时机,开始是一个Promise,之后又变成了Action.

// 现在只能这么写 var actionPanel = ui.create('ActionPanel', options); actionPanel.render(); var actionPromise = actionPanel.action; actionPanel.on('actionloaded', function(){ var actualAction = actionPanel.action; // do something else... });

// 期待这种风格 actionPanel.action.then(function(actualAction){ // do something else... })

—
Reply to this email directly or view it on GitHub.