2

我认为 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 数组中以便渲染),这会使其变得丑陋。

4

1 回答 1

3

所以{{> head }},{{> header }}{{> footer }}partials 工作,但{{> my_partial }}不是吗?您是在使用文件系统部分加载程序,还是将部分作为字符串传递给 Mustache 构造函数?

有两件事可能会吸引你:

  1. Mustache 可能不认为您的数组 ( my_partial_arr) 是“可迭代的”。Mustache.php wiki对此提供了更多信息。您可以运行array_values()它们以确保它们将被循环而不是用作部分上下文。

  2. 您不能将部分传递给小胡子模板上render()调用。

    In most cases, passing partials as a second argument won't cause a problem, since that function doesn't take a second argument anyway... it'll simply load any necessary partials via loadPartial() on your Mustache instance anyway.

于 2012-10-04T06:00:09.093 回答