Max の pattr 認識のための
JavaScript code の作り方

Max 4.5 で導入された js および jsui オブジェクトを使う場合の JavaScript コードに pattr-互換を追加することは、非常に簡単です。なぜなら、これらのオブジェクトは、すでに新しい obex クラスのアーキテクチャを利用しているため、大きな変更の必要がないからです。

あなたのオブジェクトに pattr autopattr を加えるためには、 C による Max オブジェクトとと同じように、JavaScript コードに2つの特別な関数、setvalueof() および getvalueof() を追加することが必要です。これらの関数については、JavaScript in Max ドキュメントの 「基本的なテクニック」という章の「特別な関数名」(Special Function Names) というセクションの中で簡単に述べられています。

setvalueof() 関数はあなたのオブジェクトのステート(状態)をセットするために用いられ、getvalueof() はその値を問い合わせるために用いられます。非常にシンプルな実装の例を次に示しています。これは、ステートが1つの浮動小数点数の値によって定義される JavaScript オブジェクトのためのものです。

var the_object_value = 0.5;

function setvalueof(v) { the_object_value = v; } function getvalueof() { return the_object_value; }

データがより複雑なケースでは、setvalueof() は複数のアーギュメントを受け取ります( 開発者は JavaScript の arguments プロパティを使って、入力されるアーギュメントの変数、または、または jsthisオブジェクトの arrayfromargs() メソッドにアクセスすることができます)。同様に、getvalueof() からデータの配列を返すことができます。例えば:

var object_val_one = 0.5; var object_val_two = 0.25; var object_val_three = 0.125; function setvalueof() { if (arguments.length >= 3) { object_val_one = arguments[0]; object_val_two = arguments[1]; object_val_three = arguments[2]; } do_something(); // データを処理するための、いくつかの関数 } function getvalueof() { var return_val = new Array(); return_val[0] = object_val_one; return_val[1] = object_val_two; return_val[2] = object_val_three; return return_val; }

最後に、pattrはあらゆるオブジェクトのステートの変更を通知される必要があり、いつ getvalueof() メソッドを呼び出さなければならないかを知る必要があります。 JavaScript では、この目的のために jsthis オブジェクトの notifyclients() メソッドが使用されます。

例えば、ある架空のオブジェクトを考えたとき、特別な浮動少数点数入力のための関数 msg_float() は、次のようになるでしょう。

function msg_float(d) { the_object_value = d; notifyclients(); outlet(0, d); }

上のようなテクニックを使って pattr サポートを行う JavaScript コードのシンプルな例は、jsob.js という同梱のソースコード例を参照して下さい。

Max 4.5.5 から、JavaScript によってアトリビュートを持つオブジェクトを書くことが可能になりました。これらのアトリビュートは、Max や Jitter のアトリビュートと同じように、pattr およびautopattrオブジェクトからバインドすることが可能です。