代码之家  ›  专栏  ›  技术社区  ›  JohnnyDeer

聚合物元件-更智能的响应解决方案

  •  0
  • JohnnyDeer  · 技术社区  · 10 年前

    我目前正在使用Polymer 1.0中的以下代码使我的网页的一部分具有响应性(它有效):

    <template is="dom-bind">
       <iron-media-query query="(max-width: 750px)" query-matches="{%raw%}{{isLarge}}{%endraw%}"></iron-media-query>
       <!-- set an attribute if isLarge is true -->
         <div large$="{%raw%}{{!isLarge}}{%endraw%}">
           <div class="layout vertical">
           {{ content }}
           </div>
         </div>
         <div large$="{%raw%}{{isLarge}}{%endraw%}">
           <div class="layout horizontal">
           {{ content }}
           </div>
         </div>
    </template>
    

    在我的css中,我有

    [wide] {
          display: none;
        }
    

    要隐藏 <div> 如果为假。

    现在,我想知道有没有更聪明的方法来解决这个问题 <div> .

    笔记 我注意到在聚合物0.5中 <div layout vertical> 在Polymer 1.0中不起作用。相反,仅 <div class="layout vertical"> 似乎适用于聚合物1.0。

    1 回复  |  直到 10 年前
        1
  •  1
  •   jdepypere    10 年前

    有几种方法可以实现这一点。

    计算类

    在您的特定情况下,内容似乎保持不变,唯一的区别是水平/垂直类。幸运的是,您可以为此使用计算值!下面是一个示例:

    <div large$="{%raw%}{{!isLarge}}{%endraw%}">
       <div class$="_computeThisClass(isLarge)">
          {{ content }}
       </div>
    </div>
    
    ...
    
    Polymer({
       ...
       _computeThisClass: function(isLarge) {
          if(isLarge) {
             return "layout horizontal";
          } else {
             return "layout vertical";
          }
       }
    }
    

    对我来说,最后一个的缺点是你(AFAIK)需要包含所有你需要在js中应用的类。

    使用 hidden -属性

    如果您只想隐藏元素,我建议使用 隐藏的 属性这可以采用布尔值或计算值,如上所述 here 。例如:

    <div large$="{%raw%}{{!isLarge}}{%endraw%}" hidden$="{{!isLarge}}">
       <div class="layout vertical">
          {{ content }}
       </div>
    </div>
    

    缺点是内容确实会印在页面上(这本质上是应用一个条件 display: none; ).

    使用条件模板

    也可以使用 conditional template 。例如:

    <template is="dom-if" if="{{!isLarge}}">
        <div large$="{%raw%}{{!isLarge}}{%endraw%}">
           <div class="layout vertical">
              {{ content }}
           </div>
        </div>
    <template>
    

    缺点是,内容会在稍后阶段(当条件满足时)印在页面上,这可能会导致延迟。但当情况不太可能改变时,情况就很好了!

    在你的情况下,我认为简单地计算类是最好的。

    推荐文章