【发布时间】:2014-10-16 20:43:40
【问题描述】:
我有一个自定义元素,其中一个函数在返回元素之前从服务器调用 SQL 语句。问题是:执行SQL需要很长时间,所以函数返回NULL元素,稍后完成SQL。
初始代码为:
Element launchElement(){
getItems();
return(innerDiv);
}
但由于这个问题,我尝试如下使用 Future 来控制它
Element launchElement(){
Future fonixFuture() => new Future.value(true);
fonixFuture()
.then((_)=> getItems())
.then((_)=> return(innerDiv));
}
但在 Dart 编辑器中出现了一长串错误,如下所示:
Multiple markers at this line
- Expected to find
';'
- Expected to find
';'
- Expected to find
';'
- Dead code
- Unexpected
token ')'
- Expected an
identifier
- Expected an
identifier
- Expected to find
')'
get item 函数是对服务器的简单调用以从 SQL 中获取输出:
getItems(){
request = new HttpRequest();
request.onReadyStateChange.listen(onData_getItems);
request.open('POST', host+'/getItems');
request.send(' ');
}
onData_getItems(_){
if (request.readyState == HttpRequest.DONE && request.status == 200) {
for(Map item in JSON.decode(request.responseText)){
LineItem..children.add(new OptionElement(value: item['Code'], data: item['Name']));
}
}
else if (request.readyState == HttpRequest.DONE &&
request.status == 0) {
fonixFooter.classes..add('serverERROR');
fonixFooter.innerHtml= "could not connect to server, contact your admin";
}
else
{
fonixFooter.classes..add('serverERROR');
fonixFooter.innerHtml= "Failed to fetch data from server, contact your admin";
}
}
自定义元素本身是:
class purchaseLines extends HtmlElement {
static final tag = 'purchase-lines';
factory purchaseLines() => new Element.tag(tag);
var innerDiv, LineItem;
purchaseLines.created() : super.created() {
innerDiv = new cardFonix().launchElement();
LineItem = new SelectElement()
..children.add(new OptionElement(value: '0', data:'Stock Code'));
var LineQty = new InputElement()
..type='number'
..placeholder='Qty' ;
LineQty.onKeyUp.listen((e){if(LineQty.checkValidity() == false)LineQty.value='0';});
var Lineprice = new InputElement()
..type='number'
..placeholder='price';
Lineprice.onKeyUp.listen((e){if(Lineprice.checkValidity() == false)Lineprice.value='0';});
innerDiv.nodes..add(LineItem)..add(LineQty)..add(Lineprice);
}
有什么想法吗?
【问题讨论】:
-
getItems方法的签名是什么?这必须返回一个 Future 才能使该方案起作用。 -
@SethLadd 我在问题中添加了更多代码,希望对您有所帮助。