【问题标题】:Polymer update class on click点击聚合物更新类
【发布时间】:2016-01-19 23:37:23
【问题描述】:

我有聚合物组件,旨在获取一系列选项卡并构建导航选项卡列表。我必须成功构建选项卡,但我的问题是每当我单击一个选项卡时,我的活动课程都不会移动到它。任何帮助都会很棒!

<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="basic-nav">
  <template>
    <style>
      .active{
        color: red;
      }
    </style>

    <template is="dom-repeat" items="{{tabs}}">
      <button class$="{{isActive(item.key, 'btn btn-underline')}}" on-click="changeTab">
          {{item.label}} {{item.key === tab}}
      </button>
    </template>

  </template>


  <script>
  Polymer({
    is: "basic-nav",
    properties:{
      tab: {
        type: String,
        notify: true
      }
    },
    isActive: function(key, constants){
      var classList = '';
      classList += constants || '';
      if (key === this.tab) classList += ' active';
      return classList;
    },
    changeTab: function(e){
      this.tab = e.model.item.key;
    },
    ready: function() {
      this.tabs = [
        {key: 'A',label: 'sweet'},
        {key: 'B',label: 'nice'}
      ];
    }
  });
  </script>

</dom-module>

【问题讨论】:

    标签: javascript polymer refresh components


    【解决方案1】:

    您的问题在于计算绑定的工作方式。

    在您的代码中,您使用isActive 函数来计算按钮的class 属性,但这里的问题是它只被调用一次,因为计算的绑定仅在参数之一时重新计算功能改变了,每个参数都被定义了

    因此,由于您的 isActive 函数仅接收 keyconstants 并且此处的代码从未更改,因此仅在创建元素实例时才会计算它,因为您的 changeTab 函数仅更改tab 属性。

    要获得所需的行为,您可以将tab 作为参数添加到isActive 函数,如下所示,请记住,您还应该为tab 提供一个默认值,以便执行计算绑定那个案例。

     <!-- Button html -->
    <button class$="{{isActive(item.key, 'btn btn-underline', tab)}}" on-click="changeTab">
          {{item.label}} {{item.key === tab}}
      </button>
    
     <!-- Javascript function-->
    isActive: function(key, constants, tab){
      var classList = '';
      classList += constants || '';
      if (key === tab) classList += ' active';
      return classList;
    }
    

    这是fiddle,一切正常。

    【讨论】:

    • 成功了!!!!!!太感谢你了!!!因此,它仅在参数更改时重新运行。对吗?
    • 没错,如果您想了解更多信息,请查看computed bindings 上的指南文章
    【解决方案2】:

    这里,key 是 item.key,你是通过引用进行比较,而不是值。

    if (key === this.tab) classList += ' active';
    

    我不确定 key 的值是什么,但我假设它是标签名称,在这种情况下也许可以尝试

    if (key === this.tab.type) { ... }
    

    【讨论】:

    • 选项卡正在按住键。一个更好的选项卡名称应该是 tabKey。有什么想法为什么当我单击按钮时它不会重新运行“isActive()”?
    猜你喜欢
    • 1970-01-01
    • 2016-03-18
    • 2019-05-12
    • 2014-02-20
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多