注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Slate 関数を定義して実行する

関数エディターでは、クエリ結果、グローバル変数、ウィジェットのプロパティなど、Handlebars でアクセス可能な項目に対して JavaScript 関数を定義して実行できます。

Slate 関数は Slate でのみ利用可能で、プラットフォーム全体でアクセス可能な Foundry 関数とは異なります。Slate では、Slate Platform Editor を使用して Foundry 関数にアクセスできます。詳細については、関数のドキュメントを参照してください。

関数は DOM や Slate のスペースにアクセスできず、状態も保存されません。関数はデータ変換にのみ使用できます。

関数は通常、文字列のパースなどの軽量なデータ処理タスクに使用されます。関数は非同期構文(async、await キーワード、および Promise)をサポートしています。

関数は並列ではなく、順次実行されます。Slate はキューから関数を1つずつ実行するため、次の関数が開始される前に、各関数が完了する必要があります。これは、関数が非同期呼び出しを使用する場合にも当てはまります。時間のかかる処理の完了を待つ関数は、完了するまでキューをブロックし、後続の関数の実行を遅らせます。関数が同時に実行されることを前提にしないでください。

関数

ドキュメント単位の関数ライブラリ

ユーザーは、パラメーターを持つ再利用可能な JavaScript 関数を記述できます。これにより、コードのリファクタリングが容易になり、関数内でのコードのコピーと貼り付けを減らせます。また、すべての関数を再実行ボタンを使用して、関数ライブラリに依存するすべての関数を再実行し、更新できます。

関数ライブラリ

デフォルトで利用可能な JavaScript ライブラリ

関数をより高度に活用できるよう、Slate には次の外部 JavaScript ライブラリがデフォルトで付属しています:Lodash ↗、Math.js ↗、Moment ↗、Numeral ↗、es6-shim ↗。関数を記述する際は、これらのライブラリを自由に使用できます。

すべてのユーザーに、ES6 の構文機能をサポートするブラウザーの使用が義務付けられている場合を除き、これらの機能を使用しないでください。

カスタム外部ライブラリをアップロードする

Slate 関数で使用する外部 JavaScript ライブラリをアップロードできます。

  • アプリケーションライブラリ: 関数パネルでライブラリを追加します。これらのライブラリは、その Slate アプリケーション内でのみ利用可能です。
  • プラットフォーム全体のライブラリ: 管理パネルを使用して、Foundry インスタンス全体のすべてのユーザーとアプリケーションで使用するライブラリをアップロードします。

例

例1:2個のウィジェットのプロパティを加算する

この関数は、2個のドロップダウンウィジェットの値を加算し、結果をテキストウィジェットに表示します。

関数の例1

関数エディターを開き、addNumbers という名前の関数を追加します。次の JavaScript を追加します。

Copied!
1 return {{lhs.selectedValue}} + {{rhs.selectedValue}};

次に、テキストウィジェットで Handlebars の {{addNumbers}} を使って関数名を参照し、戻り値を表示します。

関数エディターでは、どの種類のヘルパーも使用できません。

例2:クエリ結果をパースする

この関数は、クエリ結果の各要素をパースします。asteroids という名前のクエリがあり、次の JSON を返すと仮定します。

Copied!
1 {"id": [6, 7, 8],"name": ["Hebe", "Iris", "Flora"],"diameter": [185.18, 199.83, 135.89]}

次の関数は、名前と ID を組み合わせ、新しい円周プロパティも追加した結果を返します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var asteroids = {{asteroids}}; var formattedNames = []; var circumference = []; for (var i = 0; i < asteroids.name.length; i++) { formattedNames.push(formatName( asteroids.name[i], asteroids.designation[i])); circumference.push(asteroids.diameter[i] * 3.14); } return { name: formattedNames, diameter: asteroids.diameter, circumference: circumference }; function formatName(name, designation) { return name + " (" + designation + ")"; }

結果の JSON は次のようになります。

Copied!
1 2 3 4 5 { "name": ["Hebe (6)", "Iris (7)", "Flora (8)"], "diameter": [185.18, 199.83, 135.89], "circumference": [581.4652,627.4662,426.6946] }

例3:set timeout と Promise を使用して一時停止する

この関数は、5秒間隔の setTimeout を作成し、Slate 関数の実行前に5秒間一時停止します。

Copied!
1 2 3 4 5 return new Promise(resolve => { setTimeout(() => { resolve(); }, 5000); });

この関数は、5秒間の一時停止後に undefined を返します。