プロシージャは、すべての参照バッキング データモデルをブロックします。参照するバッキング データモデルは、 プロシージャ(名前、パラメータ、リターン)。Google Cloud で提供されるデータモデルは、 @blockly/block-shareable-procedures プラグインは Blockly の従来の組み込みプロシージャ・ブロックの動作を複製します
これには、カスタム プロシージャで望ましくない動作が含まれる 次のようなブロックがあります。
- 戻り値の型はサポートされていません
- すべてのパラメータがグローバル変数に関連付けられる
別の動作が必要な場合は、独自のカスタム プロシージャ データを作成できます。 構築できます
プロシージャ モデルの実装
プロシージャ データモデルでは、 IProcedureModel インターフェース。
class MyProcedureModel {
constructor(workspace, name, id) {
this.workspace = workspace;
this.name = name;
this.id = id;
// Note: construction should not add the model to the procedure map.
},
// Other methods are omitted for brevity...
}
パラメータ モデルの実装
パラメータ データモデルでは、 IParameterModel インターフェース。
class MyParameterModel {
constructor(workspace, name, id) {
this.workspace = workspace;
this.name = name;
this.id = id;
},
setProcedureModel(model) {
this.model = model;
return this;
}
// Other methods are omitted for brevity...
}
変更をトリガーする
プロシージャ モデルの変更をトリガーするメソッドでは、次の呼び出しも行う必要があります。
次の場所から triggerProceduresUpdate
:
@blockly/block-shareable-procedures プラグイン。これにより、
プロシージャ ブロックで doProcedureUpdate
を呼び出し、再レンダリングする。
import {triggerProceduresUpdate} from '@blockly/block-shareable-procedures';
class MyProcedureModel {
setName(name) {
this.name = name;
triggerProcedureUpdate();
return this;
}
// Other methods are omitted for brevity...
}
class MyParameterModel {
setName(name) {
this.name = name;
triggerProcedureUpdate();
return this;
}
// Other methods are omitted for brevity...
}
イベント
プロシージャ モデルは、 @blockly/block-shareable-procedures プラグインも起動します イベントをリッスンします。これにより 複数のワークスペースを 処理モデルをプラットフォーム間で共有できますまた、 イベントを発生させることができます。
逆シリアル化
また、各クラスのサポートに使用する static loadState
メソッドも
あります。
class MyProcedureModel {
static loadState(state, workspace) {
// Note that the procedure model should not deserialize parameters.
// The deserializer will handle that.
return new MyProcedureModel(workspace, state.name, state.id);
}
// Other methods are omitted for brevity...
}
class MyParameterModel {
static loadState(state, workspace) {
return new MyParameterModel(workspace, state.name, state.id);
}
// Other methods are omitted for brevity...
}