dom-repeat不反映数据变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dom-repeat不反映数据变化相关的知识,希望对你有一定的参考价值。

我尝试了计算属性和各种其他技术,但视图并没有反映我的模型。模型更新,但视图不更新。

视图

<div class="selection">
  <ul>
   <template is="dom-repeat" items="{{state.selection}}">
    <li>
     <a data-selection$="{{item.id}}" on-click="selection">{{item.name}}</a>
    </li>
   </template>
  </ul>
</div>

<div class="selection sub-selection">
 <template is="dom-repeat" items="{{state.subSelection}}">
  <ul id$="subselection-{{item.id}}" class$="[[item.active]]">
   <template is="dom-repeat" items="{{item.selections}}">
      <li>
       <a data-selection="{{item.id}}" on-click="selection">{{item.name}}</a>
      </li>
   </template>
  </ul>
 </template>
</div>

模型

constructor(){
   super()
   this.state = {
       selection: [
          {
            id: 1,
            name: 'Selection One'
           },
           {
            id: 2,
            name: 'Selection Two'
           }
        ],

    subSelection: [
          {
            id: 1,
            name: 'Sub Selection One',
            active: 'active'
           },
           {
            id: 2,
            name: 'Sub Selection Two',
            active: ''
           }
        ]
  }

  selection(event){
    event.preventDefault();
    let self = this;
    let id = parseInt(event.currentTarget.getAttribute('data-selection'));

    self.state.subSelection.forEach(function(key, index){
     if(key.id === id){
       key.active = 'active'
     }else{
       key.active = ''
     }
    });
}

目标是单击“选择”中的项目获取其id值并将其与“subSelection”中的项目匹配,并使用相同的ID,然后将活动值更改为“active”或“”。

一切顺利,除了视图更新。

答案

所以我最终通过this.set(属性,值)来解决它。聚合物在如何实现这一点方面非常特别。但以下工作在我的更新功能:

selection(event){
   event.preventDefault();
   let self = this;
   let id = parseInt(event.currentTarget.getAttribute('data-selection'));      
   self.state.subSelection.forEach(function(key, index){
       if(key.id === id){
         self.set("state.subSelection."+index+".active", 'active');
       }else{
         self.set("state.subSelection."+index+".active", '');
       }
   );
 }

以上是关于dom-repeat不反映数据变化的主要内容,如果未能解决你的问题,请参考以下文章

maven构建依赖jar文件不反映代码的变化

以编程方式嵌套的片段不反映导航上的父生命周期

Polymer,IE11 dom-repeat没有渲染选项标签

UI 不反映突变后的变化

为啥自定义指令不能立即反映其代码的变化

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?