首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cheetah #include不会将#def放在作用域中

Cheetah #include不会将#def放在作用域中
EN

Stack Overflow用户
提问于 2011-05-26 03:45:55
回答 2查看 545关注 0票数 2

当我使用#include (没有raw)包含一个文件时,它会正确地解析内容,但是我想在原始文件中访问的#def不存在&抛出一个错误。

基本模板:

代码语言:javascript
复制
#def sayHello($name)
hello $name
#end def

模板:

代码语言:javascript
复制
#include "../../BaseTemplate.template"
$sayHello("fred")
EN

回答 2

Stack Overflow用户

发布于 2011-12-01 06:03:15

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

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

This page有更多信息。

票数 2
EN

Stack Overflow用户

发布于 2012-04-05 06:43:59

好的,看起来你可以通过这个属性来实现:

代码语言:javascript
复制
self._CHEETAH__cheetahIncludes

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

在您的模板中,在include like之后使用它:

代码语言:javascript
复制
 $self._CHEETAH__cheetahIncludes[include_id].the_function(*args)

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

我推荐这个吗?不是的。有没有更好的方法来访问这个函数?看起来不是。有什么缺点吗?不知道,使用风险自负。这会对某些人有用吗?也许:)

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

我的用例是我想要重用一个代码片段,它可以像includes一样访问父searchList,但我想在其他模板中重用这个include和一个硬编码的参数。首先,我可以很容易地创建这个变量来更改searchList的行为部分,这可能也是您应该做的:)。这也允许我从应用层传递它,而不是在我的模板中硬编码它!

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6129996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档