在 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 使用这些浏览器。
我在使用小型飞镖应用程序时遇到问题,该应用程序在 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 使用这些浏览器。