我认为Mustache很棒,因为它允许部分,而且与Smarty相比,它也相对轻量级。我使用Mustache的想法是:定义一组构成UI库的部分。在这些部分中传递数据并像使用类固醇上的html元素一样使用它们。
部分的示例将是列表元素(可视地)。从标记的角度来看,元素被定义为20行HTML块。我想在循环中使用该部分,或者我可能想要独立使用它。
如果我想构建一个包含所提到的部分的列表,我会这样做:
{{#my_list_elems}}
... Maybe some HTML code
{{> my_partial
{{/my_list_elems}}
让我们说my_partial看起来像这样:
<div>
<ul>
{{#another_array}}
<li>{{name}}</li>
{{>#another_array}}
</ul>
</div>
现在,经过几个小时的尝试来解决这个问题,我的主要模板看起来或多或少是这样的:
{{> head}}
{{> header}}
<div>Some static HTML</div>
... More code
{{#some_array}}
{{> my_partial}}
{{/some_array}}
{{> footer}}
问题: 出于某种原因,这对我不起作用。我尝试单独渲染部分,它的工作原理。虽然阵列?咩。
另外,我很难搞清楚,如果我确实让它工作,它将如何处理变量。目前,我正在渲染它:
$template = $this->mustache->loadTemplate('template');
$partials['my_partial'] = $this->mustache->loadPartial('my_partial');
$data['my_partial_arr'] = $this->getPartialData();
echo $template->render($data, $partials);
请注意,PHP代码和部分示例不是为了协同工作,它们只是示例。
问题是,是否支持此功能?如果是的话,我做错了什么?也许我的PHP数组没有正确的格式?我可以将数组/循环放在较低的级别,在部分中,但是当我想单独使用部分时(在一个elem数组中包装数据以便渲染),这种情况会让它变得丑陋。
答案 0 :(得分:3)
所以{{> head }}
,{{> header }}
和{{> footer }}
部分有效,但{{> my_partial }}
没有?您是使用文件系统部分加载器,还是将部分作为字符串传递给Mustache构造函数?
有两件事可能会抓住你:
Mustache可能不认为您的数组(my_partial_arr
)是“可迭代的”。 Mustache.php wiki has a bit more on that。您可以通过array_values()
运行它们,以确保它们可以循环使用而不是用作部分上下文。
您无法在小胡子模板上将部分内容传递给the render()
call。
在大多数情况下,将partials作为第二个参数传递不会导致问题,因为该函数无论如何都不会采用第二个参数...它只需通过loadPartial()
加载任何必要的部分无论如何,Mustache实例。