2017-01-06 5 views
0

Я пытаюсь выяснить, что происходит с поведением Polymer. В частности, я использую поведение app-localize. Из того, что я могу собрать, свойства разделяются, если значение не определено как функция.Свойства поведения постороннего полимера

Я добавил приложение-локализовать поведение к двум элементам. У меня есть поля ввода, связанные с языковым свойством в app-localize-behavior, чтобы проверить изменение свойства. Поэтому в элементе 1 я изменяю свойство на en, и перевод в этом элементе работает, но элемент 2 ничего не делает. Я меняю язык через ввод на элементе 2, а затем это отлично.

Что я не могу понять, так я думал, поскольку свойство находилось в поведении, а затем изменение свойства в одном элементе изменило другой элемент.

Кажется немного бесполезным иметь поведение локализации приложения, которое не отражает некоторые глобальные настройки, но множество локальных настроек для языка.

Вот код, используемый в обоих элементах.

<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'} 
     } 
     } 
    } 
    }, 
... 

Может ли кто-нибудь помочь?

ответ

0

С моей точки зрения, он найдет свойство «язык» в вашем элементе и привяжет его как выбранный язык. Это не совместное использование или сохранение языка свойств в приложении.

Поведение должно использоваться для создания совместной работы ввода/вывода; В текущей ситуации я считаю, что вам нужно сохранить пользовательский язык и позволить делать все остальное.

  • Объявление о продаже недвижимости на вашем главном экране (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> 
+0

Я надеялся, что я не должен был бы пройти через настройки языка с помощью атрибутов потенциально многие, многие элементы. Но похоже, что этот подход необходим. Я полагаю, что мое понимание свойств в поведении неправильное? –

+0

Я обновил свой предыдущий ответ; пожалуйста, если это было полезно. –

+0

@Joel, спасибо за этот совет, после нескольких часов поиска я нашел это - что позволило мне иметь языковой коммутатор в заголовке приложения, который также переключил язык во взглядах. Есть одна вещь, которая меня беспокоит, однако в каждом представлении, на каждой странице) требуется следующее: . this.loadResources (this.resolveUrl ('../ locales.json')); Несомненно, это неэффективно, и это также дублирование кода? Я пытался оставить его, но он не работает. – boran

Смежные вопросы