2014-09-30 82 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中。