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(" | ");
};
})();

因此,当单独考虑时,它们已经被很好地考虑了;问题是这两个宏之间只有核心logic是真正不同的。如何在宏get之间共享功能?我试着把它们放在一个单独的提琴手里,但这不起作用;当宏运行时,TW 会引发一个错误,声称函数“未定义”。将每个函数作为自己的 javascript 宏包装在单独的 tiddler 中,例如logicformat

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

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

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

也没有帮助。

我还想将其设置为更加模块化/灵活,方法是将主 ///进程转换get为自定义过滤器,然后让普通过滤器表达式处理迭代并使用例如小部件或 <> 宏显示项目。我该如何设置呢?文档告诉我parselogicformat

如果提供的过滤器运算符不够用,开发人员可以通过添加一个模块来添加新的过滤器,其filteroperator类型为

但我找不到任何有关此 API 的文档,也找不到任何示例。

4

1 回答 1

4

如何在宏之间共享函数获取、逻辑和格式?

您可以使用 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 回答