所以我有一堆页面用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);
}
}
答案 0 :(得分:1)
使用无逻辑模板语言,您可以将逻辑移动到代码中。一个地方就是控制器,但这真的不是最好的。
最好将您的视图视为由两部分组成:一部分模板和一部分代码。您可以将此代码称为ViewModel或Presenter,或者您甚至可以将其称为View,因为一旦执行此操作,模板本身就是View通常所做的最不感兴趣的部分。
然后,控制器负责处理请求的“action”位,加载域模型并将所有内容传递给要呈现的View(s)/ ViewModel / Presenter。
以下是这种方法的几个例子: