如何在Javascript宏之间重用代码并最大限度地减少宏中的工作?

时间:2015-09-07 17:06:37

标签: tiddlywiki tiddlywiki5

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

(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在两个宏之间真的不同。如何在宏之间共享函数getlogicformat?我试着将它们放在一个单独的小提琴器中,但这并不起作用;当宏运行时,TW会引发一个错误,声称函数未被定义"。将每个函数作为自己的javascript宏包装在一个单独的tiddler中,例如

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

0 个答案:

没有答案