在 IE 10 和 IE 11 中编译的飞镖代码不是 运行

compiled dart code not running in IE 10 and IE 11

我在使用小型飞镖应用程序时遇到问题,该应用程序在 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");

//执行了下面的,handler好像是attached

    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
});

控制台完全没有显示任何错误。 也许有一个简单的解决方案,但我对飞镖比较陌生,无法弄清楚?

谢谢

我猜你提到的浏览器 <option> 不支持 click 处理程序注册。或者,您可以在 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 使用这些浏览器。