您在哪里使用无逻辑模板系统的逻辑

时间:2015-09-12 19:47:08

标签: javascript php templates mustache

所以我有一堆页面用ajax引入实体并用Mustache将它们放在DOM中。

每个实体都有一个created_on字段,它是一个MySQL DateTime,但只有DateTimes的字符串表示形式才会传递给Mustache。 我知道Mustache是​​无逻辑的,但是这个逻辑最合适的地方是什么。

我应该遍历每个实体并将created_on字段转换为模型中适当格式的日期,还是有其他更适合的地方?

编辑:

class ExampleController {
    private $dataModel;
    private $presenter;

    public function __construct(
        DataModel $dataModel,
        Presenter $presenter
    ){
        $this->dataModel = $dataModel;
        $this->presenter = $presenter;
    }

    /**
    * Action loads data from model and returns it for Mustache
    *
    */
    public function exampleAction() 
    {
        /**
        * Pull data from database
        */
        $data = $this->dataModel->getData();
        // $data = [// <-- Sample Data
        //  [
        //      'id' => 1,
        //      'created_on' => '2015-01-01 00:00:00'
        //  ],
        //  [
        //      'id' => 2,
        //      'created_on' => '2015-02-03 00:00:00'
        //  ],
        //  [
        //      'id' => 3,
        //      'created_on' => '2015-04-05 00:00:00'
        //  ]
        // ];

        /**
        * Make data presentable
        */
        $presentableData = $this->presenter->makePresentable($data);

        /**
        * Return presentable data for Mustache
        */
        echo json_encode($presentableData);
    }
}

1 个答案:

答案 0 :(得分:1)

使用无逻辑模板语言,您可以将逻辑移动到代码中。一个地方就是控制器,但这真的不是最好的。

最好将您的视图视为由两部分组成:一部分模板和一部分代码。您可以将此代码称为ViewModel或Presenter,或者您甚至可以将其称为View,因为一旦执行此操作,模板本身就是View通常所做的最不感兴趣的部分。

然后,控制器负责处理请求的“action”位,加载域模型并将所有内容传递给要呈现的View(s)/ ViewModel / Presenter。

以下是这种方法的几个例子:

Mustache.php : Idiomatic ways to template select dropdowns

https://gist.github.com/bobthecow/61161639d8be82a75b5e