共享聚合物行为属性

时间:2017-01-06 00:57:57

标签: javascript properties localization polymer behavior

我正在尝试解决聚合物行为的问题。具体来说,我正在使用app-localize-behavior。根据我可以收集的内容,除非将值定义为函数,否则将共享属性。

我已将app-localize-behavior添加到两个元素中。我有app-localize-behavior中与language属性相关联的输入框,以测试更改属性。因此在元素1中,我将属性更改为en,并且该元素中的转换有效,但元素2不执行任何操作。我通过元素2上的输入更改语言,然后翻译得很好。

我无法理解的是,我认为属性是在行为中,然后在一个元素中更改属性会更改另一个元素。

使用app-localize-behavior似乎有点无用,这种行为不会反映某些全局设置,但会反映该语言的大量本地设置。

以下是两个元素中使用的代码。

<link rel="import" href="../bower_components/app-localize-behavior/app-localize-behavior.html">
...

<input is="iron-input" bind-value="{{language}}">

<h1>{{localize('Matters')}}</h1>

...

  behaviors: [
    Polymer.AppLocalizeBehavior
  ],

  properties: {
    resources: {
      value: function() {
        return {
          'en': { 'Matters': 'English Matter'},
          'fr': { 'Matters': 'French Matter'}
        }
      }
    }
  },
...

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

根据我的理解,它将找到属性&#34;语言&#34;在您的元素中并将其绑定为所选语言。它不会在应用中共享或存储属性语言。

应该使用行为来创建可共享的输入/输出操作;在目前的情况下,我相信你需要存储用户语言,并让其他一切。

  • 在主视图(my-app.html)中声明属性。
  • 输入可能是导航栏中的下拉菜单。
  • language值绑定到您应用的所有其他观看次数。
  • language属性应具有默认值"en"

        properties: {
          language: {
            value: 'en'
          },
        }
    
我-app.html
<my-view1 language="[[language]]" name="view1"></my-view1>
我-view1.html
   <script>
      Polymer({
        is: "x-app",

        // include the behavior
        behaviors: [
          Polymer.AppLocalizeBehavior
        ],

        // set the current language—shared across all elements in the app
        // that use AppLocalizeBehavior
        properties: {
          language: {
            value: 'en'
          },
        }

        // load localized messages
        attached: function() {
          this.loadResources(this.resolveUrl('locales.json'));
        },
      });
   </script>