子ポリマー要素の属性に割り当てるルート ポリマー要素に観察可能なオブジェクトがあるという同様の状況があります。
子ポリマー要素は、この属性にバインドできます。
AppModel (グローバル モデル)
class AppModel extends Object with Observable {
@observable bool isLoggedIn = false;
@observable List<String> authenticationProvider = ['Google', 'Yahoo', 'GitHub', 'Amazon'];
}
@CustomTag("app-element")
class AppElement extends PolymerElement {
@observable AppModel appModel;
AppElement.created() : super.created() {
}
}
AppElement (html)ここでは、グローバル モデルが子要素に割り当てられます
<polymer-element name="app-element">
<template>
<my-login id="mylogin" model="{{appModel}}"></my-login>
</template>
...
</polymer-element>
MyLogin (dart)モデル属性がモデル フィールドに割り当てられます。
@CustomTag("my-login")
class MyLogin extends PolymerElement {
MyLogin.created() : super.created();
@published AppModel model;
}
MyLogin (html)グローバル モデルは、ログイン ボタン/ログイン ユーザー情報の表示/非表示に使用されます。
<polymer-element name="bwu-login">
<template>
<template if="{{!model.isLoggedIn}}">
<bs-dropdown>
<div class="dropdown">
<div class="dropdown-toggle btn btn-default btn-xs navbar-btn" role="button" data-toggle="dropdown">
<span class="glyphicon glyphicon-log-in"></span> Login
</div>
<ul class="dropdown-menu" role="menu" aria-labelledby="select authentication provider">
<template repeat="{{ap in model.authenticationProvider}}">
<li role="presentation">
<a role="menuitem" tabindex="-1" href="{{ap.authenticationUrl}}" on-click="{{openLogin}}" target="_blank">{{ap.name}}</a>
</li>
</template>
</ul>
</div>
</bs-dropdown>
</template>
<template if="{{model.isLoggedIn}}">
<small>{{model.name}}<template if="{{model.isAdmin}}"> (Admin)</template></small>
<div id="logoutButton" on-click="{{onLogoutHandler}}" class="btn btn-default btn-xs navbar-btn" role="button">
<span class="glyphicon glyphicon-log-out"></span> Logout
</div>
<!--<div><img src="{{model.avatar}}"></img>{{model.name}} <button id="logout">Log out</button></div>-->
</template>
</template>
<script type="application/dart" src='my_login.dart'></script>
</polymer-element>