Dart:@observable的getters [英] Dart: @observable of getters

查看:135
本文介绍了Dart:@observable的getters的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



当我绑定隐式getter / setter对'name'时,它会更新



但是显式的getter'fullname'在HTML中没有更新。有一种方法来做这个工作(基本上,元素绑定中的'fullname'也应该更新)。也许我缺少一个setter,但后来setter在这里没有意义...



很简单的例子来证明:



test-element.html

 < ; link rel =importhref =../../ packages / polymer / polymer.html> 
< polymer-element name =test-element>
< template>
< input value ={{ds.name}}>
< div> {{ds.name}}< / div>
< div> {{ds.fullname}}< / div>
< / template>
< script type =application / dartsrc =test1.dart>< / script>
< / polymer-element>

test-element.dart

  import'package:polymer / polymer.dart'; 
import'package:popoli / sysmaster-settings.dart';

@CustomTag('test-element')
class TestElement extends PolymerElement {
@observable VerySimpleTest ds;

TestElement.created():super.created(){
ds = new VerySimpleTest().. name ='Peter';
}
}

ds.dart

  class VerySimpleTest extends Observable {
@observable String name ='';
@observable String get fullname => 'test:$ name';
VerySimpleTest():super();
}


解决方案

一个值已改变getter依赖。

 字符串集name(String val){
name = notifyPropertyChange(#fullname,name,val);
}

或者这也应该工作

  @ComputedProperty('Test:$ name')String get fullname => 'test:$ name'; 

查看 http://japhr.blogspot.co.at/2014/08/the-polymerdart-computedproperty.html 了解更多详情。


I am trying to understand how observable getters work when they use other class instance properties:

When I bind the implicit getter/setter pair 'name' it updates in the input and in the div and everything is synced nicely.

However the explicit getter 'fullname' is not updating in the HTML. Is there a way to make that work (basically the 'fullname' in the element binding should update as well)?? Maybe I am missing a setter, but then again setter does not make sense here...

Very simple example to demonstrate:

test-element.html

<link rel="import" href="../../packages/polymer/polymer.html">
<polymer-element name="test-element">
  <template>
    <input value="{{ds.name}}">
    <div>{{ds.name}}</div>
    <div>{{ds.fullname}}</div>
  </template>
  <script type="application/dart" src="test1.dart"></script>
</polymer-element>

test-element.dart

import 'package:polymer/polymer.dart';
import 'package:popoli/sysmaster-settings.dart';

@CustomTag('test-element')
class TestElement extends PolymerElement {
  @observable VerySimpleTest ds;

  TestElement.created() : super.created() {
    ds = new VerySimpleTest()..name = 'Peter';
  }
}

ds.dart

class VerySimpleTest extends Observable {
  @observable String name = '';
  @observable String get fullname => 'Test: $name';
  VerySimpleTest() : super();
}

解决方案

You need to notify Polymer that a value has changed the getter depends on.

String set name(String val) {
  name = notifyPropertyChange(#fullname, name, val);
}

or this should work too

@ComputedProperty('Test: $name') String get fullname => 'Test: $name';

See http://japhr.blogspot.co.at/2014/08/the-polymerdart-computedproperty.html for more details.

这篇关于Dart:@observable的getters的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆