2

当我使用#include(不带raw)包含一个文件时,它会正确解析内容,但我想在原始文件中访问的#def 不存在并且会引发错误。

基本模板:

#def sayHello($name)
hello $name
#end def

模板:

#include "../../BaseTemplate.template"
$sayHello("fred")
4

2 回答 2

2

发生这种情况的原因是sayHello添加到“基本模板”(实际上是一个类)的函数,但您无法在调用模板中访问它。

我不确定解决您遇到的问题的最佳方法,但我相信您可以在行前创建defHello一个静态方法,然后导入模板而不是包含它。#@staticmethoddef

此页面有更多信息。

于 2011-11-30T22:03:14.850 回答
0

好吧,看起来你可以通过属性做到这一点:

self._CHEETAH__cheetahIncludes

这是一本包含所有包含内容的字典。

在包含后从您的模板中使用它,例如:

 $self._CHEETAH__cheetahIncludes[include_id].the_function(*args)

对我来说,include_id恰好是文件路径(我是通过先打印_CHEETAH__cheetahIncludes字典发现的,呵呵)。这是有保证的吗?不知道。

我推荐这个吗?没有。有没有更好的方法来访问该功能?似乎不是。有什么缺点吗?不知道,使用风险自负。这对某人有用吗?也许 :)

我的意思是它可能是一个有用的功能,因为人们正在尝试这样做,但这个功能是否必要?可能不是。

我的用例是我想重用一个片段,它可以像包含一样访问父搜索列表,但我想在其他模板中重用这个包含一个硬编码参数。 我可以很容易地使这个变量首先改变 searchList 的行为部分,这可能也是你应该做的:)。这也将允许我从应用程序层传递它,而不是在我的模板中硬编码它!

这很可能是一个很好的设计,因为它可以防止我们开发人员经常采取的短线削减,如果允许这样做的话。

于 2012-04-04T22:43:58.530 回答