カスタム サービスの登録

services 拡張機能を使用して、Stingray エディタ用の新しい JavaScript サービスを登録することができます。

これらのサービスは一度インスタンス化され、Stingray セッション全体で「web worker」として使用できます。カスタム JavaScript サービスの API はプラグイン内の他の場所から、または他のプラグインから呼び出すことができます。-- Stingray エディタに組み込まれた JavaScript サービスで関数を呼び出す場合と方法はまったく同じです。(サービスの使用方法の詳細については、「組み込みのエディタ サービスを使用する」を参照してください)。

たとえば、カスタム メニュー アクションや、カスタム パネルに関連付けられている JavaScript モジュールからカスタム サービスの API 関数を呼び出すことができます。このサービスの 1 つのインスタンスがそれを必要とするすべてのパネルによって共有されるため、複数のパネルで状態の情報を共有する必要がある場合に便利です。

環境設定

サービス拡張機能ごとに、次の環境設定パラメータが必要です。

extensions = {
    services = [
        {
            name = "my-custom-service"
            module = "my-module-file.js"
            api = [
                "get_greeting"
                "print_message"
            ]
        }
    ]
}

name

これはサービス モジュールの名前で、require および define 呼び出しで表示される必要があります。

module

api キーによってリストされている API 関数を含む JavaScript モジュールです。このパスは、.stingray_plugin ファイルの場所に対する相対パスです。

api

この配列は、サービスの module ファイルによって公開されているすべての関数の名前をリストする必要があります。エディタで新しいサービスが作成および登録された場合、新しいサービスの非同期 API を介してこれらの各関数が公開されます。

次の Javascript ブロックが my-module-file.js というファイルに保存されている場合、上記の環境設定で指定された API が実装されます。

以下のモジュールで公開されている関数の名前が、上記のサービス拡張機能の定義内にある api キーで定義された名前と一致していることにご注意ください。

define([], function () {
    "use strict";

    function MyService() {

        this.get_greeting = function () {
            return "Hello world!";
        };

        this.alert_message = function (message) {
            alert(message);
        };

    };

    return new MyService();
});

サービスが登録され、その API 関数が宣言されると、別の JavaScript モジュールまたはアクション内で新しいサービスを要求することで、これらの関数にアクセスできます。たとえば、次のスニペットを実行すると、新しいメニュー項目が設定され、そのアクションをトリガしたときにカスタム サービスの API が呼び出されるようになります。

extensions = {
    menus = [
        {
            path = "Window/Print info"
            action = {
                type = "js"
                script = """
                    require(['services/my-custom-service'], function (myCustomService) {
                        myCustomService.get_greeting().then(function(greeting) { console.warn(greeting); }).
                            then( function() { myCustomService.print_message("it's a fine day.") } )
                    });
                """
            }
        }
    ]
}

注意点: