Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聚合集数组不更新DOM_Javascript_Polymer 1.0 - Fatal编程技术网

Javascript 聚合集数组不更新DOM

Javascript 聚合集数组不更新DOM,javascript,polymer-1.0,Javascript,Polymer 1.0,我试着使用聚合物的单向数据流。所以我在polymer之外更新存储,然后在更新后触发事件。 当我第一次设置数组时,它就工作了。但在随后的时间里,它不起作用 这是一支钢笔: 代码如下: <base href="https://cdn.rawgit.com/download/polymer-cdn/1.5.0/lib/"> <script src="webcomponentsjs/webcomponents-lite.min.js"></script> <

我试着使用聚合物的单向数据流。所以我在polymer之外更新存储,然后在更新后触发事件。 当我第一次设置数组时,它就工作了。但在随后的时间里,它不起作用

这是一支钢笔:

代码如下:

<base href="https://cdn.rawgit.com/download/polymer-cdn/1.5.0/lib/">

<script src="webcomponentsjs/webcomponents-lite.min.js"></script>

<link rel="import" href="iron-icon/iron-icon.html">
<script>
window.theList = [{
  stuff: 'stuff'
}];
</script>
<button id="changeOutside">Increment Value</button>
<parent-element></parent-element>

<dom-module id="parent-element">

  <template>
    <div class="list">
      <template is="dom-repeat" items="[[list]]">
        <child-element item="[[item]]"></child-element>
      </template>
    </div>
  </template>

  <script>
    Polymer({
      is: 'parent-element',
      ready: function(){

        document.addEventListener('dispatch', (e)=>{
          console.log(e.detail);
          // this.list = e.detail;
          this.set('list', e.detail);
        });

      }
    });
  </script>
</dom-module>

<dom-module id="child-element">
  <template>
    <ul>
      <li>Stuff: [[item.stuff]]</li>
    </ul>
  </template>

  <script>
    Polymer({
      is: 'child-element',
      properties: {
        item: {
          type: Object,
          value: {
            stuff: 'stuff',
            things: 'things'
          }
        },
      }
    });
  </script>
</dom-module>

<script>
var changeOutside = document.querySelector('#changeOutside');
var inc = 0;

changeOutside.addEventListener('click', function(){
  var newList = window.theList.map(function(li){
    li.stuff = inc++;
    return li;
  });
  var event = new CustomEvent('dispatch', {detail: newList});
  document.dispatchEvent(event);
})
</script>

window.theList=[{
东西:“东西”
}];
增值
聚合物({
是:'父元素',
就绪:函数(){
文件.附录列表器('dispatch',(e)=>{
控制台日志(如详细信息);
//this.list=e.detail;
本.集('列表',如详图);
});
}
});
  • Stuff:[[item.Stuff]]
聚合物({ 是:'子元素', 特性:{ 项目:{ 类型:对象, 价值:{ 东西:“东西”, 事情:事情 } }, } }); var changeOutside=document.querySelector(“#changeOutside”); var inc=0; changeOutside.addEventListener('click',function(){ var newList=window.theList.map(函数(li){ li.stuff=inc++; 返回李; }); var event=newcustomevent('dispatch',{detail:newList}); 文件、调度事件(事件); })
这里肯定发生了一些奇怪的事情,下面是一个解决方法,但我希望看到聚合物支持这一点

存在的问题是,映射中的返回值是现有对象的修改版本。对象引用本身没有更改。因此,虽然有一个新的数组正在从地图创建,但对象本身并没有改变

如果你改变这张地图

var newList = window.theList.map(function(li){
  li.stuff = inc++;
  return li;
});
对下列事项:

var newList = window.theList.map(function(li){
  return {
    stuff: inc++
  };
});
然后代码按预期工作