Dart 作为JavaScript运行时未附加嵌套聚合元素

Dart 作为JavaScript运行时未附加嵌套聚合元素,dart,dart-polymer,Dart,Dart Polymer,我已经构建了一个使用嵌套聚合物元素的Polymer.dart应用程序。父元素接受属性并将其值作为属性传递给嵌套的子元素。当从DartEditor中“在Dartium中运行”时,这可以正常工作,但在应用程序“发布构建”和“作为JavaScript运行”后,嵌套元素无法加载。在构建过程中没有错误消息,也没有任何其他类型的指针。我不知道如何调试它,事实上它在没有任何警告或错误的情况下按预期运行在Dartium中也没有帮助 下面是我的应用程序的简化版本的代码,它会产生相同的问题my_view是父元素,m

我已经构建了一个使用嵌套聚合物元素的Polymer.dart应用程序。父元素接受属性并将其值作为属性传递给嵌套的子元素。当从DartEditor中“在Dartium中运行”时,这可以正常工作,但在应用程序“发布构建”和“作为JavaScript运行”后,嵌套元素无法加载。在构建过程中没有错误消息,也没有任何其他类型的指针。我不知道如何调试它,事实上它在没有任何警告或错误的情况下按预期运行在Dartium中也没有帮助

下面是我的应用程序的简化版本的代码,它会产生相同的问题
my_view
是父元素,
my_form
是加载
my_view
时附加的嵌套元素

main.html


样品
出口“包装:聚合物/初始省道”;
聚合物元素视图应显示在下面:
my_view.html


表格应显示在下面:
我的视图.省道

import'包装:polymer/polymer.dart';
导入“dart:html”;
@CustomTag(“我的视图”)
类MyView扩展了聚合关系{
@已发布的字符串视图属性;
DivElement _formSlot;
MyView.created():super.created(){
_formSlot=$['form_div'];
}
void viewAttributeChanged(){
_formSlot..append(new Element.tag('form','my form')…setAttribute('formAttribute',viewAttribute));
}
}
我的表单.html


属性值:{{formAttribute}}
姓名:
my_form.dart

import'包装:polymer/polymer.dart';
导入“dart:async”;
导入“dart:html”;
导入“dart:convert”;
@CustomTag(“我的表格”)
类MyForm使用聚合物扩展FormElement,可观察{
@已发布的字符串格式属性;
@可观察字符串名称值;
HttpRequest\u请求;
MyForm.created():super.created();
无效提交表单(事件e、变量详细信息、节点目标){
e、 预防默认值();
_请求=新的HttpRequest();
_request.onReadyStateChange.listen(_onData);
_请求打开('POST','http://my.server.com/contact_form');
_send(JSON.encode({'name':nameValue,'attribute':formAttribute}));
}
_翁达塔{
if(_request.readyState==HttpRequest.DONE){
开关(请求状态){
案例200:
//数据已成功发布
打破
案例0:
//Post失败
打破
}
}
}
}

任何帮助、暗示、祝福、祈祷都将不胜感激!谢谢

我猜这是一个dart2js错误。 为了回答这个问题,我举了一个例子

这段代码(如您在问题中所示)生成了正确的标记,但表单元素工作不正常。我没有进一步研究这种行为,因为我自己从来不需要扩展DOM元素


您也可以尝试不扩展
元素,而是创建一个新的聚合物元素,只嵌入
元素。

可能是同样的原因吗?马里奥普,谢谢你的链接。属性字段已经用
@published
进行了注释,因此这可能不是同一个问题,但我会进一步研究。想想看,当我只在html文件中执行
导出“packages:polymer/init.dart”
时,“使用Dart2js运行”对我不起作用,因为从未调用Dart2js,也没有生成JS文件。对我来说,这从来都不是问题,因为我还有其他初始化要做,但你的情况不同。您可以尝试制作一个非常简单的主dart文件,它只调用polymer.dart的
initPolymer()
,并将其包含在主HTML文件中吗?当表单元素直接放置在宿主HTML文件中而不嵌套为
时,表单在JS模式下显示时不会出现问题。此问题与将属性传递给嵌套的子元素或表单动态附加的方式有关。问题在于调用
setAttribute()
。取消呼叫后,问题不会出现。我猜这是因为
dart2js
中有一个bug,它无法处理对
setAttribute()的调用