在Polymer 1.0中实现全局变量

时间:2015-12-30 19:11:30

标签: javascript html polymer polymer-1.0

我试图复制Polymer 0.5 docs的以下部分中的示例,它使用MonoState模式在Polymer中实现全局变量:

http://www.polymer-project.org/0.5/docs/polymer/polymer.html#global

我试图使用Polymer 1.0来解决这个问题,但运气不好。

以下是app-globalsmy-component自定义元素的代码。除了在Polymer 1.0中稍微不同的语法之外,它与上面的链接相同。例如使用dom-module代替polymer-element

<dom-module name="app-globals">
    <script>
        (function() {
            // these variables are shared by all instances of app-globals
            var values = {
                firstName: 'John',
                lastName: 'Smith'
            }

            Polymer({
                 is: 'app-globals',
                ready: function() {
                    // make global values available on instance.
                    this.values = values;
                }
            });
        })();
    </script>
</dom-module>

<dom-module name="my-component">
    <template>
        <app-globals id="globals"></app-globals>
        <div id="firstname">{{$.globals.values.firstName}}</div>
        <div id="lastname">{{$.globals.values.lastName}}</div>
    </template>
    <script>
        Polymer({
             is: 'my-component',
              ready: function() {
                console.log('Last name: ' + this.$.globals.values.lastName);
              }
    });
    </script>
</dom-module>

用法很简单:

<my-component></my-component>

最初我遇到了错误&#34;无法读取属性&#39; $&#39;未定义&#34;。因此,我在div自定义元素中将$.globals.values.firstName内容this.$.globals.values.firstName替换为lastName(同样适用于my-component字段)。

然而,div不显示名字和姓氏。看似this.$.globals.values.firstNamethis.$.globals.values.lastName在渲染div时未设置。

希望得到一些帮助来解决这个问题。

1 个答案:

答案 0 :(得分:3)

以下是工作示例Plunk

properties: {
          values: {
            type: Object,
            notify: true
          }
        },

        ready: function() {
          // make global values available on instance.
          this.values = {
            firstName: 'John',
            lastName: 'Smith'
          }
        }