有什么方法可以根据某些条件递归调用 Rythm 模板吗?
Is there any way to recursively invoke a Rythm template based on some condition?
我目前正在使用 Rythm to create some snippets - in combination with AST,因为模板依赖于 Java 个文件。
Invoking templates 按预期工作。有一个意想不到的行为。我想递归调用模板,但似乎这是不可能的。
Foo.html模板
@args String someString, boolean recursion
Calling foo template with recursion: @recursion
@if(recursion) {
A recursion was requested: @recursion
@foo(someString, false)
}
注意 这仅提供了 1 级递归,按照本示例的意图。但是,稍后我想在 @foo(someString, false)
行中使用条件而不是 false
。
您可以通过简单地将提供的示例复制并粘贴到 foo.html
.
来试用代码段 here
错误信息
The method foo(String, boolean) is undefined for the type Cfoo_html__R_T_C__
Template: /foo.html
Relevant template source lines:
-------------------------------------------------
1: @args String someString, boolean recursion
2:
3: Calling foo template with recursion: @recursion
4: @if(recursion) {
5: A recursion was requested: @recursion
>> 6: @foo(someString, false)
7: }
/*
* Omitted for the sake of readability.
*/
现在,错误似乎与递归无关。不过,这是我在 Eclipse 中看到的错误消息。
我想,当调用一个模板时,不可能在它自身内部调用它,因为 Rythm 只寻找 其他 个模板——至少看起来是这样。
使用上面的link访问Rythm Fiddle,把代码放在bar.html
里面而不是foo.html
- 改变行#6 从 @foo(someString, false)
到 @bar(someString, false)
.
现在,将以下行放在 foo.html
中:
@bar("foo", true)
这样做时,错误变为:
java.lang.SecurityException: java.util.concurrent.TimeoutException
我认为这证明了我上面的假设,因为 Rythm 现在似乎找到了模板(或方法)。这基本上就是我被困的地方。
所以,问题是:有什么方法可以根据某些条件递归调用 Rythm 模板吗?
我也愿意接受其他建议,因为递归通常可以以非递归方式处理。我只是想避免重复代码。
节奏支持@this()
指令以递归方式加载模板。参见 http://play-rythm-demo.appspot.com/demo/fibonacci
然而,它似乎引入了一个错误,现在即使指定了终止条件,它也会引发 WhosebugError
。请向 https://github.com/rythmengine/rythmengine/issues
提交错误报告
更新
WhosebugError
是由 boolean
类型引起的。如果使用其他类型的变量来控制递归调用的终止,一切都很好。
@args String foo, int i
<h1>@foo</h1>
Calling foo template with recursion: @i
@if(i > 1) {
A recursion was requested: @i
@this({foo: foo, recursion: false, i: (i - 1)})
}
下面是对节奏进行的测试fiddle
我目前正在使用 Rythm to create some snippets - in combination with AST,因为模板依赖于 Java 个文件。
Invoking templates 按预期工作。有一个意想不到的行为。我想递归调用模板,但似乎这是不可能的。
Foo.html模板
@args String someString, boolean recursion
Calling foo template with recursion: @recursion
@if(recursion) {
A recursion was requested: @recursion
@foo(someString, false)
}
注意 这仅提供了 1 级递归,按照本示例的意图。但是,稍后我想在 @foo(someString, false)
行中使用条件而不是 false
。
您可以通过简单地将提供的示例复制并粘贴到 foo.html
.
错误信息
The method foo(String, boolean) is undefined for the type Cfoo_html__R_T_C__
Template: /foo.html
Relevant template source lines:
-------------------------------------------------
1: @args String someString, boolean recursion
2:
3: Calling foo template with recursion: @recursion
4: @if(recursion) {
5: A recursion was requested: @recursion
>> 6: @foo(someString, false)
7: }
/*
* Omitted for the sake of readability.
*/
现在,错误似乎与递归无关。不过,这是我在 Eclipse 中看到的错误消息。
我想,当调用一个模板时,不可能在它自身内部调用它,因为 Rythm 只寻找 其他 个模板——至少看起来是这样。
使用上面的link访问Rythm Fiddle,把代码放在bar.html
里面而不是foo.html
- 改变行#6 从 @foo(someString, false)
到 @bar(someString, false)
.
现在,将以下行放在 foo.html
中:
@bar("foo", true)
这样做时,错误变为:
java.lang.SecurityException: java.util.concurrent.TimeoutException
我认为这证明了我上面的假设,因为 Rythm 现在似乎找到了模板(或方法)。这基本上就是我被困的地方。
所以,问题是:有什么方法可以根据某些条件递归调用 Rythm 模板吗?
我也愿意接受其他建议,因为递归通常可以以非递归方式处理。我只是想避免重复代码。
节奏支持@this()
指令以递归方式加载模板。参见 http://play-rythm-demo.appspot.com/demo/fibonacci
然而,它似乎引入了一个错误,现在即使指定了终止条件,它也会引发 WhosebugError
。请向 https://github.com/rythmengine/rythmengine/issues
更新
WhosebugError
是由 boolean
类型引起的。如果使用其他类型的变量来控制递归调用的终止,一切都很好。
@args String foo, int i
<h1>@foo</h1>
Calling foo template with recursion: @i
@if(i > 1) {
A recursion was requested: @i
@this({foo: foo, recursion: false, i: (i - 1)})
}
下面是对节奏进行的测试fiddle