Dart Polymer - 将已发布的变量传递给其他类

时间:2014-02-21 03:20:15

标签: dart dart-polymer

简洁的视图模式通过将GUI类拆分为View和Presenter来增加GUI应用程序的单元测试覆盖率。如果正确完成,View变得如此简单(简陋),不需要任何测试,并且Presenter只包含易于测试或模拟的普通(非GUI)字段。

(有关此模式的详细信息,请参阅页面底部的http://martinfowler.com/eaaDev/uiArchs.html)。

我正在尝试将'简陋的视图'模式应用于聚合物应用程序,并认为我会使用最简单的方法将已发布(已观察)的字段“注入”到我的Presenter类中。但我发现,当Presenter更改已发布字段的值时,GUI不会更新。

以下是基于clickcounter代码的示例。如您所见,计数字段被注入Presenter,单击按钮时调用方法increment(),但更改后的值不会反映在GUI中

知道为什么这不起作用吗?

@CustomTag('click-counter')
class ClickCounter extends PolymerElement {
  @published int count = 0;

  MyTestedClass mytestedclass;

  ClickCounter.created() : super.created() {
    mytestedclass = new MyTestedClass()..count = count;
  }

  void increment() {
    mytestedclass.increment();
  }
}

class MyTestedClass{

  int count = 0;

  void increment() {
    count++;
  }
}

一种可能的解决方案是定义一个接口以将两个实例绑定在一起。然而,它看起来确实有点'笨重'

class View {
  int count;
}

@CustomTag('click-counter')
class ClickCounter extends PolymerElement implements View{
  @published int count = 0;

  MyTestedClass mytestedclass;

  ClickCounter.created() : super.created() {
    mytestedclass = new MyTestedClass( this);
  }

  void increment() {
    mytestedclass.increment();
  }
  void setCount( int count){
    this.count = count;
  }
}

class MyTestedClass{

  View view;

  MyTestedClass( this.view);

  void increment() {
    view.count++;
  }
}

1 个答案:

答案 0 :(得分:2)

您需要在MyTestedClass.count上添加@observable注释,以便发布对它的更改。

有一天,可能不需要注释,但现在是。