Wakanda でカスタム ウィジェットを作成しています。
このウィジェットは、プロパティの関数でクラスを変更する必要があります。たとえば、プロパティが shadowDepth=2 の場合、クラスを として設定しmdl-shadow--2dp
ます。それ以外の場合、shadowDepth=6 の場合、クラスを mdl-shadow--6dp として設定します。
このようにクラスを変更するにはどうすればよいですか?
Wakanda でカスタム ウィジェットを作成しています。
このウィジェットは、プロパティの関数でクラスを変更する必要があります。たとえば、プロパティが shadowDepth=2 の場合、クラスを として設定しmdl-shadow--2dp
ます。それ以外の場合、shadowDepth=6 の場合、クラスを mdl-shadow--6dp として設定します。
このようにクラスを変更するにはどうすればよいですか?
最もよく使用されるアプローチは次のとおりです。
enum
カスタム ウィジェットに属性を追加します。onChange
希望するクラスを適用するトリガーを作成します。各ステップを個別に見てみましょう。
カスタム ウィジェットの作成方法をご存じでしょうか。のウィジェット定義に属性を追加しましょうwidget.js
。
var myWidget = widget.create('myWidget', {
// widget attributes
});
属性については、次のenum
ように定義できます。
shadowDepth: widget.property({
type: 'enum',
description: 'Shadow depth for MDL widget',
values: {
'mdl-shadow--1dp': '1',
'mdl-shadow--2dp': '2',
'mdl-shadow--3dp': '3',
'mdl-shadow--4dp': '4',
'mdl-shadow--5dp': '5',
'mdl-shadow--6dp': '6'
},
defaultValue: 'mdl-shadow--2dp',
bindable: false
})
このようにenum
して、現時点では何もしない属性を追加しました。
DOM で割り当てることができるウィジェットの初期値を取得するためにdefaultValueCallback
、属性プロパティの直後に次のように関数を定義しますdefaultValue
。
defaultValueCallback: function() {
var r = /mdl-shadow--\ddp/.exec(this.node.className); // regex are cool
return r[r.length - 1] || 'mdl-shadow--2dp'; // return the latest occurrence of the class or the default value
},
ウィジェットのinit
属性宣言で、次のコードを追加します。
init: function() {
// first call to set the attribute
this._changeShadowDepth(this.shadowDepth());
// onChange event
this.shadowDepth.onChange(this._changeShadowDepth);
}
次のように関数を追加し_changeShadowDepth
ます。
_changeShadowDepth: function(value) {
var $node = $(this.node); // jQuery is included in the prototype, do not worry
[
'mdl-shadow--1dp', 'mdl-shadow--2dp', 'mdl-shadow--3dp',
'mdl-shadow--4dp', 'mdl-shadow--5dp', 'mdl-shadow--6dp'
].forEach(function(klass) {
$node.removeClass(klass);
});
if (value) {
$node.addClass(value);
}
},
これは、公式の画像ウィジェットが align (background-align) プロパティを変更するために使用するアプローチとまったく同じです。