polymer init
cliコマンドでポリマーアプリを起動した後。アプリケーションの基本的なセットアップを含むテンプレートを提供しました。また、ルーティングの設定も含まれます。
開くmy-app.html
と、次のように表示されます。
<app-location route="{{route}}"></app-location>
<app-route
route="{{route}}"
pattern="/:page"
data="{{routeData}}"
tail="{{subroute}}"></app-route>
<app-drawer-layout fullbleed>
<iron-selector selected="[[page]]" attr-for-selected="name" class="drawer-list" role="navigation">
<a name="view1" href="/view1">View One</a>
<a name="view2" href="/view2">View Two</a>
<a name="view3" href="/view3">View Three</a>
</iron-selector>
<iron-pages role="main" selected="[[page]]" attr-for-selected="name">
<my-view1 name="view1"></my-view1>
<my-view2 name="view2"></my-view2>
<my-view3 name="view3"></my-view3>
</iron-pages>
今のところすべて明らかです。しかし、次のようなこのページの JavaScript 実装があります。
Polymer({
is: 'my-app',
properties: {
page: {
type: String,
reflectToAttribute: true,
observer: '_pageChanged'
},
},
observers: [
'_routePageChanged(routeData.page)'
],
_routePageChanged: function(page) {
this.page = page || 'view1';
},
_pageChanged: function(page) {
// load page import on demand.
this.importHref(
this.resolveUrl('my-' + page + '.html'), null, null, true);
}
});
だからここに質問があります:
1 つは変数に、もう 1 つはグローバルに、2 つのオブザーバーが定義されているのはなぜですか?
1:
page: {
type: String,
reflectToAttribute: true,
observer: '_pageChanged'
},
2:
observers: [
'_routePageChanged(routeData.page)'
],
page
つまり、同じ変数を 2 つの異なる場所で 監視しているように見えます。