2

私は現在、私が開発している (非常に限られた対象ユーザー) プラグインの一部である 2 つのマクロを持っています。どちらも基本的には次のようになります。

(function(){
exports.name = "name";

exports.params = [
    {name: "value"}
];

function get(tiddler) {
    // return some contents of some tiddler fields according to some rule
}

function parse(data) {
    // convert string to some kind of useful object
}

function logic(x, y) {
    // determine whether the two objects correspond in some way
};

function format(data, title) {
    // produce WikiText for a link with some additional decoration
};

exports.run = function(value) {
    value = parse(value);

    var result = [];
    this.wiki.each(function(tiddler, title) {
        var data = get(tiddler);
        if (data !== undefined && logic(value, parse(data))) {
            result.push(format(data, title));
        }
    });
    return result.join(" | ");
};
})();

したがって、個別に考えると、それらはすでにかなりきれいに分解されています。問題は、コアだけがlogic2 つのマクロ間で実際に異なっていることです。関数を共有したり、マクロ間で共有したりするにはどうすればよいgetですlogicformat? それらを別のティドラーに入れてみましたが、うまくいきません。マクロが実行されると、TW は関数が「定義されていない」と主張するエラーを発生させます。各関数を独自の javascript マクロとして個別のティドラーにラップします。

(function(){
exports.name = "get";

exports.params = [
    {name: "tiddler"}
];

exports.run = function(tiddler) {
    // return some contents of some tiddler fields according to some rule
}
})();

も役に立ちませんでした。

getメインの/ parse/ logic/formatプロセスをカスタム フィルターに変えて、通常のフィルター式で反復処理を行い、ウィジェットや <> マクロなどを使用して、これをよりモジュール化/柔軟に設定したいと思います。アイテムを表示します。これをどのように正確に設定しますか?ドキュメントは私に教えてくれます

提供されたフィルター演算子が十分でない場合、開発者はfilteroperator型のモジュールを追加することで新しいフィルターを追加できます

しかし、これに関する API のドキュメントや例は見つかりません。

4

1 に答える 1

4

関数 get、logic、および format をマクロ間で共有するにはどうすればよいですか?

Common/JS 標準require('<tiddler title>')構文を使用して、別の Tiddler のエクスポートにアクセスできます。ターゲット tiddler は、JS モジュールとして設定する必要があります (つまり、typeフィールドを に設定しapplication/javascriptmodule-typeフィールドを に設定しますlibrary)。ここで例を見ることができます:

https://github.com/Jermolene/TiddlyWiki5/blob/master/core/modules/widgets/count.js#L15

また、メインの get/parse/logic/format プロセスをカスタム フィルターに変えて、通常のフィルター式で反復処理を行い、たとえばウィジェットまたは<> アイテムを表示するマクロ。これをどのように正確に設定しますか?

フィルタ オペレータを記述するための API は現在ドキュメント化されていませんが、参照すべき多くの例があります。

https://github.com/Jermolene/TiddlyWiki5/tree/master/core/modules/filters

于 2015-09-09T07:58:36.093 に答える