我如何在Javascript宏之间重用代码并最小化宏内完成的工作



我目前有两个宏,它们是我正在开发的插件(非常有限的受众)的一部分,它们看起来基本像:

(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, 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的文档,也没有任何示例。

如何共享宏之间的函数get,逻辑和格式?

你可以使用Common/JS标准require('<tiddler title>')语法来访问另一个tiddler的导出。目标tiddler应该设置为JS模块(即,type字段设置为application/javascript, module-type字段设置为library)。您可以在这里看到一个示例:

https://github.com/Jermolene/TiddlyWiki5/blob/master/core/modules/widgets/count.js课时

我还想将其设置为更加模块化/灵活,通过将主要的get/parse/logic/format过程转换为自定义过滤器,然后让正常的过滤器表达式处理迭代并使用例如小部件或<>宏来显示项目。我该怎么做呢?

编写过滤器操作符的API目前还没有文档,但是有很多例子可以参考:

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

相关内容

  • 没有找到相关文章

最新更新