【问题标题】:PHPTAL: Viewmodel SolutionPHPTAL:视图模型解决方案
【发布时间】:2013-09-10 01:37:39
【问题描述】:

我选择了 PHPTAL(来自 PHPMustache 之后),我正在尝试将一个 ViewModel 类 Mustache-style 注入到我的模板中。让我解释一下..

控制器

$viewmodel = new \Viewmodel\Home();
$template = new \PHPTAL('application/views/home.html');
$template->viewmodel = $viewmodel;
echo $template->execute();

home.html

<p>Hello <strong>${viewmodel/test}</strong>.</p>

Home.php

namespace Viewmodel;
class Home {
    function test() {
        return "world";
    }
}

上述工作,但是如何避免在每个变量引用前加上“viewmodel/”

使用 Mustache,您的变量上下文可以是单个类。例如。 echo $template-&gt;render($html, $viewmodel);。不需要前缀。所有的 meat 都在一个松散耦合的视图模型中。我想用 PHPTAL 强制执行此行为,而不必将整个类显式分配给变量名。

【问题讨论】:

    标签: mvvm viewmodel phptal


    【解决方案1】:

    简而言之,不。

    没有等效于 JavaScript 的 with(model){} 运算符。您应该明确通过 $context-&gt;set() 声明的变量并明确使用模型,例如${user/name} 而不是 ${name}。最新版本(在 GitHub 中)支持闭包,因此您可以将其用于延迟计算的变量。

    如果您不直接访问模型并且您想通过视图模型代理所有数据,那么这看起来与 Mustache 设计理念的阻抗不匹配。

    在 PHPTAL 的 MVC 方法中,您的业务逻辑由模型/控制器处理(例如,存储/操作客户的帐户余额)和任何特定于视图的逻辑(例如,如果余额为负数,则将其显示为红色)进入模板。

    没有中间对象来调解该通信以增加模板的表现力,因为模板语言更具表现力,并且可以使用 TALES 表达式进行扩展:

    <strong tal:condition="customer/isInDebt"/>
    
    <strong tal:condition="isNegative:customer/balance"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      相关资源
      最近更新 更多