聚合物 - 数据绑定到行为中的变量

时间:2016-07-26 03:34:18

标签: templates data-binding polymer bind behavior

我的问题是我的聚合物成分似乎不是数据绑定到我的行为中定义的变量。想知道这是不受支持还是我的思维错误。

我将行为中的变量共享用作使用该行为的任何人的全局状态:

<script>
var StackOverflowBehavior = {
    properties: {
        show: {
            type: Boolean,
            value: false,
            notify: true
        }
    },
    attached: function() {

        $.ajax({
            type: 'GET',
            url: 'http://myRestApiURL',
            success: this.onRequestSucceed,
            error: this.onRequestFailed
        });
    },

   onRequestSucceed: function(response) {
        this.show = true; // i hardcoded this at the moment to make sure it changes.  console logging shows that the variable is getting changed.  also tried changing this to this.show
   }

现在,我将聚合物成分与行为联系起来:

<template is="dom-if" if="{{show}}">
    <!-- SOME ELEMENTS HERE -->
</template>

Polymer({
   is: "my-polymer-component",
   behaviors: [
      StackOverflowBehavior
   ],

问题在于,最初绑定到show变量的模板绑定到初始StackOverflowBehavior.show,因此模板不可见,但当show变为true时模板不会出现。类似地,当我在StackOverflowBehavior中初始化show = true时,它开始可见但是当我设置show = false时,模板不会像我期望的那样消失。

我确实做了一个解决方法,就是使用铁信号来发布show变量的变化。然后每个聚合物组件都有一个局部显示变量,当接收到信号时,该变量被设置为新的显示变量。每个聚合物组分的模板与其局部变量结合。这个工作。但是,当绑定到行为中的共享变量时,它不起作用。

编辑:似乎我更改了附加函数中的变量更新,绑定到共享全局行为的数据有效,但如果我从用户定义的函数更改变量,它就不会。从带有数据绑定模板的聚合物组件,我可以在ready()方法中调用console.log(show)并让它打印出正确的值。

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

叹息...实际代码在ajax中获取json响应并尝试将其转换为boolean,但它实际上是一个字符串(不是我的api这样做)所以我得到了转换错误,搞砸了数据绑定