Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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 通知聚合物新的功能结果_Javascript_Polymer_Polymer 2.x - Fatal编程技术网

Javascript 通知聚合物新的功能结果

Javascript 通知聚合物新的功能结果,javascript,polymer,polymer-2.x,Javascript,Polymer,Polymer 2.x,即使输入命令没有更改,如何告知Polymer 2.0函数结果的更改?考虑这个小例子,它修改了基本聚合物2-起始试剂盒的MY-VIEW1: <dom-module id="my-view1"> <template> <style include="shared-styles"> :host { display: block; padding: 10px; } </style>

即使输入命令没有更改,如何告知Polymer 2.0函数结果的更改?考虑这个小例子,它修改了基本聚合物2-起始试剂盒的MY-VIEW1:

<dom-module id="my-view1">
  <template>
    <style include="shared-styles">
      :host {
        display: block;

        padding: 10px;
      }
    </style>

    <div>[[getText(node)]]</div>

    <paper-button on-tap="changeElements">Change elements</paper-button>
  </template>

  <script>
    class MyView1 extends Polymer.Element {
      static get is() { return 'my-view1'; }

      static get properties() {
        return {
           node: {
            type: Number,
            value: 0
          },

          node2: {
            type: Number,
            value: 5
          }
        }
      }

      changeElements() {
        this.node2 += 1;
        console.log(this.getText(0));
      }

      getText(item) {
        return this.node2;
      }

    }

    window.customElements.define(MyView1.is, MyView1);
  </script>
</dom-module>

:主持人{
显示:块;
填充:10px;
}
[[getText(节点)]]
改变要素
类MyView1扩展了Polymer.Element{
静态get是(){return'my-view1';}
静态获取属性(){
返回{
节点:{
类型:数字,
数值:0
},
节点2:{
类型:数字,
价值:5
}
}
}
changelements(){
该节点2+=1;
log(this.getText(0));
}
getText(项目){
返回这个。node2;
}
}
window.customElements.define(MyView1.is,MyView1);
当我单击按钮时,node2和getText的结果会发生变化,这会显示在控制台中。然而,所描绘的值始终保持在初始值5。我猜,因为节点没有改变,所以改变不会被处理。是否有可能将功能结果的变化通知Polymer?类似于函数或类似对象的notifyPath?或者我需要设置一些标志或类似的东西吗


虽然我知道这个最小的示例很容易通过输出node2而不是使用getText(node)来解决,但在我的常规项目中,函数根据不同的因素计算输出要复杂得多。

您使用的是计算绑定和node属性,这意味着只有在更新节点时才会重新计算它。如果希望在更新node2时触发node2,则需要绑定node2。(或绑定到节点和节点2..)

这是一个有点奇怪的例子,因为您正在绑定一个未使用的值

对于

<div>[[getText(node)]]</div>
[[getText(节点)]]
。。。加上

<div>[[getText(node, node2)]]</div>
[[getText(节点,节点2)]]
并使用此.set('node2',number)将事件发送到[[getText]],以便更新。使用此设置变量。[variable]=XXX通常不会更新任何内容


养成使用this.set的习惯,否则当您开始使用dom repeat和dom if时,您会遇到真正的麻烦。

[编辑]我想我不理解这一点--set()似乎没有必要。如果要显示
node2
的值,只需
[[getText(node2)]]
:这个例子很奇怪,因为我想保持简单。在我的实际案例中,我们使用了一个抽象函数,在这种情况下,谁的输出可以取决于不同的因素,这些因素因对象而异。但是,只要输出可以更改,我就可以发送通知。是否可以发送这样的通知,即getText的输出已更改,并且在节点未更改的情况下重新计算?或者我可以发送一个通知,声明节点已更改,即使它没有更改?如果您能够在输出将要更改时发送通知,我觉得您应该创建一个新属性nodeText,并根据需要使用新值手动更新它。这将自动更新你的html。这就是我所做的,它工作得很好。谢谢