【问题标题】:Notify polymer about new function result通知聚合物新功能结果
【发布时间】:2017-07-22 06:18:55
【问题描述】:

即使输入命令没有改变,我如何告诉 Polymer 2.0 函数结果的改变?考虑这个小例子,它修改了基本的 polymer-2-starter-kit 的 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>

当我单击按钮时,node2 和 getText 的结果会发生变化,这会显示在控制台中。但是,所描绘的值始终保持在初始值 5。我猜,由于节点没有改变,所以没有处理改变。是否有可能通知 Polymer 函数结果的变化?类似函数的 notifyPath 或类似的东西?还是我需要设置一些标志或类似的东西?

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

【问题讨论】:

    标签: javascript polymer polymer-2.x


    【解决方案1】:

    为了……

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

    ...添加...

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

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

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

    【讨论】:

    【解决方案2】:

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

    有点奇怪的例子,因为你绑定到一个你没有使用的值。

    【讨论】:

    • 这个例子很奇怪,因为我想保持简单。在我的真实案例中,我们在这种情况下使用了一个抽象函数,其输出可能取决于不同的因素,这些因素因对象而异。但是,只要输出发生变化,我就可以发送通知。是否可以发送这样的通知,即 getText 的输出已更改并在节点未更改的情况下重新评估?或者我可以发送一个通知,声称该节点已更改,即使它没有?
    • 如果您能够在输出更改时发送通知,那么在我看来,您应该创建一个新属性 nodeText 并根据需要使用新值手动更新它。这将自动更新您的 html。
    • 我就是这么做的,而且效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2021-01-21
    相关资源
    最近更新 更多