dart:无法从事件处理程序设置属性
以下代码不起作用。也许我做错了什么。。请更正我的代码:dart:无法从事件处理程序设置属性,dart,polymer,dart-polymer,Dart,Polymer,Dart Polymer,以下代码不起作用。也许我做错了什么。。请更正我的代码: index.html: 页 点击我 导入'dart:html'; 进口“包装:聚合物/聚合物.dart”; 导入“msg_box.dart”; void main(){ initPolymer(); ButtoneElement btn=查询选择器(“btn”); btn.onmouseinter.listen((e){ MsgBoxElement elm=查询选择器(“msg”); window.alert(elm.caption);
页
点击我
导入'dart:html';
进口“包装:聚合物/聚合物.dart”;
导入“msg_box.dart”;
void main(){
initPolymer();
ButtoneElement btn=查询选择器(“btn”);
btn.onmouseinter.listen((e){
MsgBoxElement elm=查询选择器(“msg”);
window.alert(elm.caption);//显示“caption 1”
elm.caption=“caption 2”//不要工作!
window.alert(elm.caption);//显示“caption 2”,但页面显示“caption 1”!!!
});`
}
{{caption}}
import'包装:polymer/polymer.dart';
@CustomTag('msg-box')
类MsgBoxElement扩展了聚合关系{
//田地
字符串标题;
字符串get caption=>\u caption;
无效集标题(字符串值){
_caption=notifyPropertyChange(#caption,_caption,value);
}
MsgBoxElement.created():super.created(){
}
}
这个问题对我来说至关重要。另请参见根据您的信息,似乎模型正在更新,但DOM没有更新,很可能是因为未设置可观察元素。尝试将以下注释添加到您的
msg\u框中
dart代码:
import'包装:polymer/polymer.dart';
@CustomTag('msg-box')
类MsgBoxElement扩展了聚合关系{
//田地
@可观察字符串_标题;
@可反射字符串get caption=>\u caption;
@可反射的空集标题(字符串值){
_caption=notifyPropertyChange(#caption,_caption,value);
}
MsgBoxElement.created():super.created(){
}
}
请参见dart邮件列表中有关属性的内容。另请参见关于设置getter的部分我认为这里的问题在于,由于您的代码未在脏检查区域中运行,因此存在未处理的挂起更改通知。要解决此问题,您可以做两件事:
- 更新到
标题后立即调用
;或者Observable.dirtyCheck()
- 在脏检查区域内运行代码:
void main(){
var dirtyCheckingZone=initPolymer();
dirtyCheckingZone.run(){
ButtoneElement btn=查询选择器(“btn”);
btn.onmouseinter.listen((e){
MsgBoxElement elm=查询选择器(“msg”);
elm.caption=“caption 2”;
});
});
}
此区域确保在执行任何回调或侦听器后,我们将为您调用Observable.dirtyCheck。这种方法比显式调用dirtyCheck要好一些,因为在编译部署时,我们会从脏检查切换到显式通知。initPolymer返回的区域将更改以反映这一点
另请注意:如果使用@published
注释,则可以简化上面的MsgBoxElement。这意味着一个属性既是可观察的,也是作为元素属性公开的
import'包装:polymer/polymer.dart';
@CustomTag('msg-box')
类MsgBoxElement扩展了聚合关系{
@已发布的字符串标题;
MsgBoxElement.created():super.created();
}
不幸的是,这在当前版本的dart polymer(0.8.10)中不起作用。谢谢!第一种方法很好用。第二个返回null(方法run)。因此我得到了一个例外。发现了相同的问题。。我建议避免使用您自己的main()
,继续使用polymer/init.dart
,然后使用@CustomTag('msg-box')
和/或@initMethod
调用您自己的方法。。还记得在@CustomTag
之前调用@initMethod
吗?…使用脏检查区运行代码有哪些缺点?有其他选择吗?更具哲理的是:为什么不能为从polymerement继承的类创建合适的构造函数?