【问题标题】:Polymer built-in way to use "sub-pages" and core-submenu?聚合物内置方式使用“子页面”和核心子菜单?
【发布时间】:2015-03-03 10:57:17
【问题描述】:

我正在尝试使用core-submenu 创建一个页面(因此还有“子页面”(不是真正的组件))。但正如我在网上看到的那样,这存在一个“问题”,因为按下 core-submenu 项目将触发 selected 事件,即使自然只希望在按下子元素时触发它。

我找到了这个link,它解释了一种实现我想要的方法,但这种方法依赖于所有页面上的 id 和core-submenu childs。我不需要“循环”生成我的菜单。通过不使用 core-submenu 一切都可以正常工作,甚至不需要最轻微的 javascript 代码。

是否有一些可以使用的对核心页面和核心子菜单的内置支持?换句话说:不需要任何(或最少)使用 javascript 的方式?

.
. //some code here
.    
<core-menu theme="core-light-theme" selected="{{selected}}" selectedItem={{item}}>
        <core-submenu icon="settings" label="Favorites">
          <core-item icon="https" label="Hello"></core-item>
          <core-item icon="https" label="World"></core-item>
        </core-submenu>
    </core-menu>
.
. //some code here
.
    <core-animated-pages transitions="cross-fade" selected="{{selected}}">
      <section id="page-1">
        <div cross-fade>Hello content</div>
      </section>
      <section id="page-2">
        <div cross-fade>World content</div>
      </section>
    </core-animated-pages>
.
. //some code here
.

谢谢!

【问题讨论】:

    标签: javascript polymer


    【解决方案1】:

    尝试使用 valueattr for ex:

    <core-menu theme="core-light-theme">
        <core-submenu icon="settings" label="Favorites"  valueattr="number" selected="{{number}}">
          <core-item icon="https" label="Hello" number="0"></core-item>
          <core-item icon="https" label="World" number="1"></core-item>
        </core-submenu>
          <core-submenu icon="settings" label="Favorites2"  valueattr="number" selected="{{number}}">
          <core-item icon="https" label="Hello2" number="2"></core-item>
          <core-item icon="https" label="World2" number="3"></core-item>
        </core-submenu>
    </core-menu>
      <core-animated-pages transitions="cross-fade" selected="{{number}}">
      <section id="page-1">
        <div cross-fade>Hello content - {{number}}</div>
      </section>
      <section id="page-2">
        <div cross-fade>World content - {{number}}</div>
      </section>
          <section id="page-3">
        <div cross-fade>Hello content - {{number}}</div>
      </section>
      <section id="page-4">
        <div cross-fade>World content - {{number}}</div>
      </section>  
    </core-animated-pages>
    

    【讨论】:

    • 感谢您提供没有使用任何 javascript 的解决方案!
    • 似乎 {{number}} 值在按下核心子菜单时变为空,并且在实际按下子项之前未设置为正确值。此空值导致错误行为。有什么办法可以防止这种情况发生吗?
    • 添加这个&lt;core-menu valueattr='number'&gt;和这个&lt;core-submenu number='{{number}}'&gt;。这应该会有所帮助
    • 谢谢@wirlez,但进行这些更改会导致第二个核心子菜单根本没有响应。 ://
    • 您期望什么行为?如果没有为 ex 选择核心项目,您可以添加默认选择:
    【解决方案2】:

    好吧,你可以抛弃“共享选择”的想法,而是让一些东西响应“核心选择”事件。

    这样就可以了。

        <template is='auto-binding'>
        <core-scaffold>
            <core-header-panel navigation flex>
                <core-toolbar>Menu</core-toolbar>
    
                <core-menu on-core-select='{{navFunc}}'>
    
                    <core-item label='page1'></core-item>
    
                    <core-submenu label='something' type='submenu'>
                        <core-item label='page2'></core-item>
                        <core-item label='page3'></core-item>
    
                        <core-submenu label='super submenu' type='submenu'>
                            <core-item label='page4'></core-item>
                            <core-item label='page5'></core-item>
                        </core-submenu>
    
                    </core-submenu>
    
                    <core-submenu label='more here' type='submenu'>
                        <core-item label='page6'></core-item>
                        <core-item label='page7'></core-item>
                    </core-submenu>
    
                </core-menu>
    
            </core-header-panel>
    
            <core-animated-pages selected='{{myselection}}' valueattr='label'>
                <section label='page1'>Page1</section>
                <section label='page2'>Page2</section>
                <section label='page3'>Page3</section>
                <section label='page4'>Page4</section>
                <section label='page5'>Page5</section>
                <section label='page6'>Page6</section>
                <section label='page7'>Page7</section>
            </core-animated-pages>
    
        </core-scaffold>
        </template>
        <script>
            var template = document.querySelector('template[is="auto-binding"]');
    
            template.navFunc = function(e, detail){
                if (detail.item.getAttribute('type') !== 'submenu' && detail.isSelected == true) {
                    template.myselection = detail.item.getAttribute('label');
                }
            }
        </script>
    

    【讨论】:

    • 感谢您的解决方案!我想我会使用这个和发布的另一个答案的混合体。我不知道可以使用的 valueattr-property!但是,我会接受另一个答案,因为它实际上不包含我要求的 javascript。
    • 当您发现他的解决方案无法正常工作时,请随时回来 :)
    • 好吧,他忘记了某些地方的一些属性,但它几乎按预期工作。我在他的帖子中评论时出现了问题。但我仍然觉得我不应该需要 javascript! :)
    猜你喜欢
    • 2014-11-02
    • 2015-06-16
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多