你其實並不需要實現複雜的事情,只是用區區dom-if
。
工作原型:http://jsbin.com/gezihatera/edit?html,console,output
正如你可以看到,「查看一號」使用自定義的頁面元素,重新選擇時總是restamped。其他頁面是普通的div
元素,因爲這只是一個最小的原型。但是這也表明你可以有選擇地選擇哪些頁面被重新打包,哪些不打印(如果你不總是需要的話)。
的實質是:按dom-if文件,如果你的restamp
屬性設置爲true
,那麼dom-if
總會創建和在選擇/取消他們摧毀你的網頁。你可以在控制檯中看到這個,在ready
元素上打印出sample-page ready
。我還創建了一個幫助函數_equals
來幫助比較指定的頁面是否真的被選中。
綜上所述,讓我貼的代碼應用程序:
<dom-module id="sample-app">
<template>
<style>
:host {
display: block;
}
</style>
<iron-selector selected="{{page}}" attr-for-selected="name">
<a name="view1" href="#">View One</a>
<a name="view2" href="#">View Two</a>
<a name="view3" href="#">View Three</a>
</iron-selector>
<iron-pages role="main" selected="[[page]]" attr-for-selected="name">
<template is="dom-if" if="[[_equals(page, 'view1')]]" restamp="true">
<sample-page name="view1">view1</sample-page>
</template>
<div name="view2">view2</div>
<div name="view3">view3</div>
</iron-pages>
</template>
<script>
Polymer({
is: 'sample-app',
_equals: function(a, b) {
return a == b;
},
});
</script>
</dom-module>
,並且採樣頁面的代碼:
<dom-module id="sample-page">
<template>
<style>
:host {
display: block;
}
</style>
<content></content>
</template>
<script>
Polymer({
is: 'sample-page',
ready: function() {
console.log('sample-page ready');
},
});
</script>
</dom-module>
希望這滿足你的問題。
注意:你應該不把name
屬性上dom-if
本身,而是在它的內容(方法同我一樣)。
感謝您的回覆,它適用於現場!不能相信這是簡單的 –
不工作在ES6你可以提供它的es6版本 – grvpanchal