JavaScriptのPolymerフレームワークにおける通知インタラクションを詳しく解説_基礎知識

WBOY
リリース: 2016-05-16 15:48:16
オリジナル
1275 人が閲覧しました

Polymer は、アクセサー プロパティの形式で監視要件を持つプロパティを定義します (監視要件のないプロパティは、引き続き通常のプロパティの形式で定義されます)。 「::」構文をテンプレートで使用して、属性をターゲット要素のイベントに双方向に同期することもできます。これは Angular の双方向バインディングの概念であり、それよりもさらに純粋で原理に近いものです。
プロパティで定義された属性がnotifyで追加されておらず、テンプレートで使用されていない場合、監視要件がないため、通常の属性として定義されます。それ以外の場合は、アクセサー属性として定義されます。次の例でこの問題を説明します。

を実行します

<script> var Polymer = { dom: 'shadow' }; </script>
<base href="http://www.web-tinker.com/share/" />
<link rel="import" href="polymer/polymer.html" />

<dom-module id="demo-test">
 <template>
  <h1>[[z]]</h1>
 </template>
 <script>
  Polymer({
   is: 'demo-test',
   properties: {
    x: { value: 'x' },
    y: { value: 'y', notify: true }
   },
   ready: function() {
    console.log(Object.getOwnPropertyDescriptor(this, 'x'));
    console.log(Object.getOwnPropertyDescriptor(this.__proto__, 'y'));
    console.log(Object.getOwnPropertyDescriptor(this.__proto__, 'z'));
   }
  });
 </script>
</dom-module>

<demo-test></demo-test>

ログイン後にコピー

通知が true に設定されている属性は、変更時に「プロパティ名変更」イベントを生成します。属性名とChangedは水平バーでリンクされており、Changedは過去形であり、変更のプロトタイプではないことに注意してください。 Polymer はリスナーを使用してイベント リスナーを追加できますが、関数に直接バインドすることはできず、特定のプロパティ名にバインドする必要があります (なぜこのように設計されているのかわかりません)。

を実行します

<script> var Polymer = { dom: 'shadow' }; </script>
<base href="http://www.web-tinker.com/share/" />
<link rel="import" href="polymer/polymer.html" />

<dom-module id="demo-test">
 <template>
  <h1>[[i]]</h1>
 </template>
 <script>
  Polymer({
   is: 'demo-test',
   properties: {
    i: { value: 0, notify: true }
   },
   ready: function() {
    setInterval(function(that) {
     that.i++; 
    }, 100, this);
   },
   listeners: {
    'i-changed': 'iChangeHandler'
   },
   iChangeHandler: function(event) {
    console.log(event.detail.value);
   }
  });
 </script>
</dom-module>

<demo-test></demo-test>

ログイン後にコピー

イベントは、テンプレートの「::」構文を使用してキャプチャできます。これらのイベントには、上記で生成された通知イベントや、ユーザーによってアクティブにトリガーされたインタラクティブ イベントが含まれます。

を実行します

<script> var Polymer = { dom: 'shadow' }; </script>
<base href="http://www.web-tinker.com/share/" />
<link rel="import" href="polymer/polymer.html" /

<dom-module id="demo-test">
 <template>
  <input value="{{text::input}}" /><hr/>
  <textarea value="{{css::input}}"></textarea><hr/>
  <h1 style$="[[css]]">[[text]]</h1>
 </template>
 <script>
  Polymer({ is: 'demo-test' });
 </script>
</dom-module>

<demo-test></demo-test>


ログイン後にコピー

2015729120757886.png (856×498)

値は純粋なプロパティの割り当てではなく、要素の属性に割り当てられるため、上記は直接 style="css" ではなく style$="[css]" であることに注意してください。したがって、等号の前に「$」を追加します (実際、この構文は非常に奇妙に見えると思います)。
上記は、Polymer のデータ バインディングについて私が知っているすべてです。抜けがあるかもしれませんし、他の記事に追記するかもしれません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート