已编译的dart代码未在IE 10和IE 11中运行

时间:2015-05-22 08:26:44

标签: dart internet-explorer-10 internet-explorer-11 dart2js

我在使用小型飞镖应用程序时遇到问题,该应用程序在Chrome和Firefox中运行得非常好......猜猜是什么....不在IE 10和11中(Win10预览中的Project Spartan可以工作!)。

这是一个简单的UI控制逻辑,如下所示:

...
//init elements
SelectElement studyList = querySelector('#studies');
SelectElement roleList = querySelector('#roles');
SelectElement siteList = querySelector('#sites');
ButtonElement createButton = querySelector('#create');

//Kick in the UI logic
_populateStudies();

//UI logic
_populateStudies() {
  for (var study in studies) {
    OptionElement option = new OptionElement();
    option.text = study;
    studyList.children.add(option);
  }
  for (OptionElement element in studyList.children) {
    throw new Exception("ADDING_HANDLER");

//执行以下操作,处理程序似乎已附加

    element.onClick.listen(_studyClickHandler);
  }
}

//从未在IE上执行

_studyClickHandler(Event e) {
  siteList.children.clear();
  roleList.children.clear();
  _populateRoles();
}

_populateRoles(){
  List<String> roles = context.getRolesFor(studyList.selectedOptions[0].text);
  for (var role in roles) {
    OptionElement option = new OptionElement();
    option.text = role;
    roleList.children.add(option);
  }
  for (OptionElement element in roleList.children) {
    element.onClick.listen(_roleClickHandler);
  }
}
...

在IE中,第二个选择框保持为空。 Chrome和Firefox按预期处理代码,根据第一个选择框中选择的元素填充框的子项。 我不知道问题是什么......我重构了处理程序是匿名函数

onClick.listen((_){
  handle stuff
});

控制台完全没有错误。 也许有一个简单的解决方案,但我对飞镖相对较新,无法弄明白?

由于

enter image description here

1 个答案:

答案 0 :(得分:3)

我想您提到的浏览器click不支持<option>处理程序注册。或者,您可以在SelectElement.onChange上注册回调,并使用以下内容检索所选内容:

import 'dart:html';
void main() {
  SelectElement select = querySelector('select');
  select.onChange.listen((_) {
    final opt = select.options[select.selectedIndex];
    print(opt.value);
  });
}

您可以使用这些浏览器try it on DartPad