我已经拿起了 PHPTAL(来自 PHPMustache 之后),我正在尝试将 ViewModel 类 Mustache-style 注入我的模板中。让我解释一下..
控制器
$viewmodel = new ViewmodelHome();
$template = new PHPTAL('application/views/home.html');
$template->viewmodel = $viewmodel;
echo $template->execute();
首页.html <- 模板
<p>Hello <strong>${viewmodel/test}</strong>.</p>
首页.php <- 视图模型类
namespace Viewmodel;
class Home {
function test() {
return "world";
}
}
上述方法有效,但是如何避免在每个变量引用前面加上"viewmodel/"?
使用Mustache,您的变量上下文可以是单个类。 echo $template->render($html, $viewmodel);
.前缀不是必需的。所有的肉都在松散耦合的视图模型中。我想使用 PHPTAL 强制执行此行为,而不必将整个类显式分配给变量名。
简而言之,没有。
没有等同于 JavaScript 的 with(model){}
运算符。你应该明确你通过$context->set()
声明哪些变量并显式使用模型,例如 ${user/name}
而不是${name}
.最新版本(在 GitHub 中)支持闭包,因此您可以将其用于延迟计算的变量。
如果您没有提供对模型的直接访问,并且希望通过视图模型代理所有数据,那么这看起来与 Moustache 设计理念的阻抗不匹配。
在PHPTAL的MVC方法中,您由模型/控制器处理业务逻辑(例如,存储/操作客户的帐户余额),并且任何特定于视图的逻辑(例如,如果余额为负数,则将其显示为红色)进入模板。
没有中间对象来调解该通信以增加模板的表现力,因为模板语言更具表现力,并且可以使用 TALES 表达式进行扩展:
<strong tal:condition="customer/isInDebt"/>
<strong tal:condition="isNegative:customer/balance"/>