对于我的Polymer应用程序,我需要两种不同的observable,例如整数值和字符串值。我使用getter和setter来封装状态和内部表示。通过这样做,我必须为每个setter中的每个observable实现 notifyPropertyChange ,这会导致更多的errorprone管道代码。例如 我需要两次 notifyPropertyChange - 两种口味的陈述,如果我必须使用 4种口味,我必须使用4 * 4 = 16 notifyPropertyChange - 语句。我修改了点击计数器示例来说明这一点:
@CustomTag('click-counter')
class ClickCounter extends PolymerElement {
int _count;
@observable int get count => _count;
@observable set count(int val) {
notifyPropertyChange(#count,_count,val);
_count = notifyPropertyChange(#strcount,_count,val);}
@observable String get strcount {
print("TOSTRING "+_count.toString());
return _count.toString();}
@observable set strcount(String val) {
notifyPropertyChange(#strcount,_count,int.parse(val));
_count = notifyPropertyChange(#count,_count,int.parse(val));}
ClickCounter.created() : super.created() {
}
void increment() {
count++;
}
}
在没有那么多 notifyPropertyChange - 声明的情况下,是否有更好的方法来实现它?
问候
马库斯
答案 0 :(得分:1)
我还没有对它进行过测试,但它应该可行,如果你有更多这样的属性,我认为它的代码要少得多。
@CustomTag('click-counter')
class ClickCounter extends PolymerElement {
int _count;
@observable int get count => _count;
set count(int val) {
notifyPropertyChange(#count,_count,val);
notifyPropertyChange(#strcount, _count.toString(), val.toString());
_count = val;
@observable String get strcount {
// print("TOSTRING "+_count.toString());
return _count.toString();}
set strcount(String val) {
count = int.parse(val); // set the new value using the setter not the field to fire property change
}
ClickCounter.created() : super.created();
void increment() {
count++;
}
}
答案 1 :(得分:1)
如果count
属性不需要是私有的 - 根据Dart style guide需要考虑的事项 - 这种情况可以选择一个甜蜜的选项。
class ClickCounter extends PolymerElement {
@observable int count;
...
void countChanged(oldValue) {
// do something...
}
}
可观察属性发生的更改会自动在名为<property_name>Changed
的方法上传递,其中property_name引用要侦听的属性。
希望这有助于为编写聚合物组件带来更多乐趣。
答案 2 :(得分:1)
不确定这是否适用于您,但我遇到了同样的问题。在我的情况下,虽然我只用一个属性和一个过滤器来解决它。
dart class
int count;
int asInt(...) // can't remember details of filters
HTML 的
<input type="text">{{count | asInt}}<input>
对代码不正确的道歉。我在手机上,没有时间搜索代码。希望你能得到这个想法
干杯 安德斯