使用@published设置bool发布的属性

时间:2014-11-06 00:20:46

标签: dart dart-polymer

我有以下.dart组件

@CustomTag('description-form')
class DescriptionForm extends PolymerElement {
  @observable Map<String, dynamic> datamap = {};
  @observable String description = '';

  @published
  String get label => readValue(#label);
  set label(String value) => writeValue(#label, value);

  @published
  bool get isVisible => readValue(#isVisible);
  set isVisible(bool value) => writeValue(#isVisible, value);

  DescriptionForm.created() : super.created();

  void publish() {
    datamap['description'] = description;
  }

  @override
  void attached() {
    super.attached();
    datamap['receiver'] = dataset['receiver'];
  }
}

要使用已发布的属性,我将以表格

执行以下操作
  <description-form
    label = 'Others'
    isVisible = false
    data-receiver = 'shared| description-form --> dynamic-chkbx'>
  </description-form>

标签解析后,isVisible不会。 设置使用@published发布的bool的正确机制是什么?

3 个答案:

答案 0 :(得分:1)

回应@ montyr75的回答。

当您希望DOM中可用的字段值在CSS选择器中使用时,

PublishedProperty(reflect: true)是必需的。如果仅在代码@published中使用它是好的。 (尽管如此,仍然不完全确定。)

如果您想要一个布尔属性,该属性通过属性的存在来指示true,并且想要使用false,则需要使用问号<description-form isVisible?="{{reference}}">

我尝试了一个布尔属性,就像你在代码中使用它一样,它只对我有效。

另一个提示: 如果希望集合中的更改在视图中生效,则应使集合可观察 @observable Map<String, dynamic> datamap = toObservable({});

答案 1 :(得分:0)

通常,布尔属性基于它们是否存在而起作用。因此,如果您在类中设置属性,请执行以下操作:

@PublishedProperty(reflect: true) bool isVisible = true;

然后您可以在HTML中使用它:

  <description-form
    label = 'Others'
    isVisible
    data-receiver = 'shared| description-form --> dynamic-chkbx'>
  </description-form>

如果代码中存在isVisible,则该类中的true,并将类的属性更改为false会删除代码上的属性(感谢reflect: true)。

希望有所帮助!

答案 2 :(得分:0)

简单回答你的问题:

将正确解析标签中的字符串。如果你有一个布尔发布的属性isVisible,如果你希望isVisible为<description-form></description-form>,那么只需使用false,如果你希望它是<description-form isVisible></description-form>,可以使用true