2014-09-30 81 views
2

我试图通过聚合物元素http://www.polymer-project.org/docs/elements/core-elements.html#core-pages中的核心页面来完成页面更改检测,因此我可以为它们加载适当的方法。现在,Dart片段在init方法中初始化(第一个在应用程序启动时启动)。我不知道如何跟踪页面何时更改,以及检测更新的体面方式(所以我至少可以在下面的代码片段中看到不同的LOG更新)。代码与这个问题密切相关:Google Dart Pages within Tabs。如果您需要更多信息,请告诉我。Dart核心页面选择器检测

HTML:

<paper-tabs id="Tabs" selected="{{page}}" style='width:800px; height:50px; color:#333333;'> 
     <paper-tab>Display 1</paper-tab> 
     <paper-tab>Display 2</paper-tab> 
    </paper-tabs> 

    <core-pages selected="{{page}}"> 
    </core-pages> 

飞镖:

@observable int page = 0; 

var pages = shroot.querySelector("core-pages"); 
    pages.onChange.listen((e) { 
      //keep for debugging 
       if (pages == 0) { 
        _LOG.info("properties 1 selected"); 
        display(); 
       } else if (pages == 1) { 
        _LOG.info("properties 2 selected"); 
        display(); 
       } 
      }); 
+0

什么不行? – 2014-09-30 18:01:45

+0

我似乎无法看到任何LOG输出。它实际设置正确吗? – user3757992 2014-09-30 18:02:28

回答

2

我找不到任何core-pages事件change或它的超类。

我觉得这是做最简单的方法:

@observable int page = 0; 

    void pageChanged(oldValue, newValue) { 
    //keep for debugging 
    if (page == 0) { 
     _LOG.info("properties 1 selected"); 
     display(); 
    } else if (page == 1) { 
     _LOG.info("properties 2 selected"); 
     display(); 
    } 
    } 

如果你喜欢听的事件,core-pages延伸core-selector具有
- core-select - 为取消选择(旧),然后选择发送两次(新)。您需要访问活动详情,以了解它是哪一个,并且目前很困难,因为您需要使用dart-js-interop
- core-activate - 在点击项目元素时触发。不知道是否在选择通过绑定更改时触发,并且还需要访问event.details以获取实际选择的页面。

+0

如果在同一个类中有'@observable int page = 0',那么只要'page'的值发生变化,就会调用pageChanged'。这是'Observable'的一个特性(当你扩展'PolymerElement'时你会自动获得它 – 2014-09-30 18:26:37

2

这是我用得到核心的页面选择更改事件:

<core-pages on-core-select='{{pageChange}}' id='pager' selected="{{page}}"> 
    <!-- content page widgets --> 
</core-pages> 

然后在DART

void pageChange(Event e, d, _){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    if(d['item'] is! ContentPage) return; 

    if (d['isSelected']){ 
    d['item'].loaded(); 
    }else{ 
    d['item'].unloaded(); 
    } 
} 

我所有的内容页面实现一个混合ContentPage.loaded() & .unloaded()方法,这就是我如何警告每个内容页面,它现在被选中或取消选择。我这样做是因为core-pages在运行时将所有内容加载到DOM中。