Php 胡须模板中的嵌套数据

Php 胡须模板中的嵌套数据,php,kohana,mustache,kohana-3.2,Php,Kohana,Mustache,Kohana 3.2,我的胡子是全新的,这是我的第一个项目,我正在尝试它。我将它与Kohana3.2和Kostache模块以及mustache的PHP实现一起使用 我收集了一系列体育比赛,每个比赛都有许多项目,每个项目有3个实体,我称之为“结果”。我的任务是在一个表中显示所有这些内容。以下模板显示了我需要如何显示此表 {{#tournaments}} <h2>{{name}}</h2> <table class="event_list"> {{#ev

我的胡子是全新的,这是我的第一个项目,我正在尝试它。我将它与Kohana3.2和Kostache模块以及mustache的PHP实现一起使用

我收集了一系列体育比赛,每个比赛都有许多项目,每个项目有3个实体,我称之为“结果”。我的任务是在一个表中显示所有这些内容。以下模板显示了我需要如何显示此表

{{#tournaments}}
    <h2>{{name}}</h2>
    <table class="event_list">
        {{#events.find_all}}
            <tr>
                <td>{{day}}</td>
            {{#outcomes.find_all}}
                <td class="outcome">{{name}}</td>
            {{/outcomes.find_all}}
            </tr>
        {{/events.find_all}}
    </table>
{{/tournaments}}

这是可以修复的吗?

Mustache是无逻辑的,这意味着您想要的所有逻辑(除了简单的存在检查和循环)都应该通过将逻辑包含在您用作输入的JSON中来完成

基本上,您需要将所有变量(如css类)编码到json中

按照您的示例,请参阅下面的JSON和模板(未经测试,但这应该可以让您继续)

JSON

模板

{{#tournaments}}
 <h2>{{name}}</h2>
 <table class="event_list">
     {{#events}}
         <tr>
             <td>{{day}}</td>
             {{#outcomes}}
                <td class="outcome {{cssClass}}">{{name}}</td>
             {{/outcomes}}
         </tr>
     {{/events}}
 </table> 
{{/tournaments}}
因为这会重复很多次,所以您可以将其外部化给助手

JAVASCRIPT:

 var myHelper = function(param){
   return "class"+param;
 }  
JSON

或者从“名字”推断可能更好

 .... {
        name: "outcomeTypeA",
        cssClass: function(){
          return myHelper(this); //this refers to object literal on this level 
                                 //containing 2 properties: 'name' and 'cssClass'
        }
     },....
然后:

 var myHelper = function(obj){
   var param = obj.name.substring(obj.name.length-2); //get last char from 'name'-prop
   return "class"+param;
 }

您可以尝试在视图模型中使用类似于以下内容的函数:

public function outcomes()
{
    $outcomes = ORM::factory('outcome')->find_all();

    $result = array();

    foreach ($outcomes as $outcome) 
    {
        $push = $outcome->object();

        $push['name']  = $outcome->name;
        $push['class'] = 'class_'.$outcome->name;

        $result[] = $push;
     } 
     return $result;
}
然后在你的胡子上你会有这样的东西:

{{#tournaments}}
    <h2>{{name}}</h2>
    <table class="event_list">
        {{#events.find_all}}
            <tr>
                <td>{{day}}</td>
                {{print_outcomes}}
            </tr>
        {{/events.find_all}}
    </table>
{{/tournaments}}
public function print_outcomes(){
    return "<td>aa</td>";
}
{{#outcomes}}
    <td class="{{class}}">{{name}}</td>
{{/outcomes}}
{{{#结果}
{{name}}
{{/结果}

我忘了提到我使用PHP实现mustache,我不能在这里使用JSON函数(你是说mustache的PHP实现?嗯,如果是这样的话,我想端口缺少大的功能..恐怕我帮不了你,除了使用建议的非函数路径。
 .... {
        name: "outcomeTypeA",
        cssClass: function(){
          return myHelper(this); //this refers to object literal on this level 
                                 //containing 2 properties: 'name' and 'cssClass'
        }
     },....
 var myHelper = function(obj){
   var param = obj.name.substring(obj.name.length-2); //get last char from 'name'-prop
   return "class"+param;
 }
public function outcomes()
{
    $outcomes = ORM::factory('outcome')->find_all();

    $result = array();

    foreach ($outcomes as $outcome) 
    {
        $push = $outcome->object();

        $push['name']  = $outcome->name;
        $push['class'] = 'class_'.$outcome->name;

        $result[] = $push;
     } 
     return $result;
}
{{#outcomes}}
    <td class="{{class}}">{{name}}</td>
{{/outcomes}}