Javascript 聚合物-根据选定的熨斗页面更改纸张工具栏内容

Javascript 聚合物-根据选定的熨斗页面更改纸张工具栏内容,javascript,polymer,polymer-1.0,polymer-starter-kit,Javascript,Polymer,Polymer 1.0,Polymer Starter Kit,在Polymer Starter Kit上展开,我正在努力找出如何在不同的熨斗页面处于活动状态时将汉堡(菜单)图标更改为不同的按钮 index.html <paper-toolbar class="paper-toolbar-0" id="mainToolbar"> <paper-icon-button id="paperToggle" icon="menu" paper-drawer-toggle></paper-icon-button> <

在Polymer Starter Kit上展开,我正在努力找出如何在不同的
熨斗页面
处于活动状态时将汉堡(
菜单
)图标更改为不同的按钮


index.html

<paper-toolbar class="paper-toolbar-0" id="mainToolbar">

  <paper-icon-button id="paperToggle" icon="menu" paper-drawer-toggle></paper-icon-button>
  <!-- more toolbar content here -->

</paper-toolbar>

<iron-pages attr-for-selected="data-route" class="layout vertical center" selected="{{route}}">

  <!-- Top Stories -->     
  <section data-route="topstories">
    <story-list id="story-list" class="layout vertical center-justified"></story-list>
  </section>

   <!-- Item Info -->     
  <section data-route="item-info" class="fullbleed layout center-justified">
    <item-info firebase-item-id="[[params.firebaseitemid]]" class="fullbleed flex"></item-info>
  </section>

</iron-pages>


当选择了
项目信息
路线时,我想将
菜单
纸张切换按钮
替换为
后退
按钮。可能会将工具栏文本从应用程序标题更改为“返回顶部故事”,例如


现在,我认为可以通过在每个控件上设置
id
,然后在
item info
元素中使用一些Javascript来进行这些更改。我更喜欢模块化一点的东西,因为这会将我的
项目信息
元素与它外部的内容紧密地联系在一起

我假设您的
纸质工具栏
铁皮页
都位于同一个模板中,以便两者都可以评估
路由
属性。你可以很容易地使用或切换。

我做了一个自定义的聚合元素,你可以将一组图标传递给它,并将它们放在工具栏上

下面是代码:

<dom-module id="my-toolbar-icons">
<template>
    <template is="dom-repeat" items="{{contextualButtons}}" as="button" id="buttonsRepeat">
        <paper-icon-button contextual-action="{{button.action}}" icon="{{button.icon}}" on-tap="onContextualButtonTap"></paper-icon-button>
    </template>
</template>

<script>
Polymer({
    is: 'my-toolbar-icons',
    properties: {
        contextualButtons: {
            type: Array,
            value: function () {
                return [];
            }
        }
    },
    ready: function(){
        //set data just to show an icon
        this.contextualButtons = [{ icon: 'social:person-add', action: 'new' }, { icon: 'delete', action: 'delete' }, { icon: 'cloud-upload', action: 'update' }, { icon: 'image:camera-alt', action: 'takephoto' }, { icon: 'search', action: 'search' }];
    },
    setData: function (newContextualButtons) {
        //set data to the array (usage)
        //var item = document.querySelector("#id-of-this-element")
        //item.setData(someArrayOfIcons)
        this.contextualButtons = newContextualButtons;
    },
    onContextualButtonTap: function (event) {
        var item = this.$.buttonsRepeat.itemForElement(event.target);
        this.fire('customize-listener', item.action);
    }
});
</script>
</dom-module>

<!--Usage-->
<my-toolbar-icons id="my-toolbar-icons"></my-toolbar-icons> <!--declaration-->

<!--with javascript-->
this.toolbar= document.querySelector("#my-toolbar-icons");
this.toolbar.setData([{ icon: 'social:person-add', action: 'new' }]);

聚合物({
是:‘我的工具栏图标’,
特性:{
上下文按钮:{
类型:数组,
值:函数(){
返回[];
}
}
},
就绪:函数(){
//将数据设置为仅显示图标
this.contextualButtons=[{icon:'social:person add',action:'new'},{icon:'delete',action:'delete'},{icon:'cloud upload',action:'update'},{icon:'image:camera alt',action:'takephoto'},{icon:'search',action:'search'}];
},
setData:函数(新上下文按钮){
//将数据设置为数组(用法)
//var item=document.querySelector(“此元素的id”)
//item.setData(某些阵列)
this.contextualButtons=newContextualButtons;
},
onContextualButtonTap:函数(事件){
var item=this.$.buttonnsrepeat.itemforeElement(event.target);
this.fire('customize-listener',item.action);
}
});
this.toolbar=document.querySelector(“我的工具栏图标”);
this.toolbar.setData([{icon:'social:person add',action:'new'}]);

这只是一个可以用来让你想做的想法。

虽然我已经设法让它工作了(感谢指针指向正确的方向),但我不能说我对它完全满意-例如,我有一个函数需要在点击
后运行
按钮的
。这现在需要在应用程序级别提供。你也可以通过自定义事件来实现这一点。Backbutton抛出“back”事件,您的应用程序路由器在文档级别侦听此事件。好主意-当您需要在不同图标之间循环时,我可以看到这一点非常有用。但是,您将如何处理它们之间的转换?如果能够像YouTube播放按钮转换为暂停按钮那样进行一次很好的转换就好了。解决我在这个元素上的问题就足够了。老实说,我没有考虑如何向每个图标添加转换,但是您可以意识到,有一个监听器可以为相应的图标执行操作,然后只需要向监听器添加额外的功能,我认为是这样的。顺便说一句,对不起我的英语。