0

I would like to pass an array value to a view function so that it can send back some HTML based on that value sent. I want my system to either send back textarea, textbox or radio button.

On my mustache I have {{#get_question}}{{type}}{{/get_question}} where type can have any value from ["input","radio","comment"] The main headache I have is how to call this function and pass the parameter.

I would like to have a php function get_question which extracts the value passed in {{type}}, if type is not text, I would like to pass the value of type to my partial call {{>}} and dynamically load the partial represented by the {{type}} I got this code sample from Kohana forums:

Hello, {{#caps }}{{ text }}{{/ caps }}!

    $m = new Mustache_Engine(array(
        'helpers' => array(
            'caps' => function() {return function($text, $m) {
                  return strtoupper($m->render($text));
            }}
        )
    ));

I can't seem to get it to work from my view since I have to enclose it in another function(){} block.

How do I go about this?

Churchill
  • 1,587
  • 5
  • 27
  • 39

1 Answers1

0

It's a headache because you're fighting against the fundamentals of Mustache :)

This is a bit backwards from the "Mustache way". Instead of trying to shoehorn in logic via lambdas, you should extract the logic into your view/viewmodel/model, and limit your template to simple sections and string interpolations. Something like this would do the trick:

{{# questions }}
  {{# is_input }}{{> input }}{{/ is_input }}
  {{# is_radio }}{{> radio }}{{/ is_radio }}
  {{# is_comment }}{{> comment }}{{/ is_comment }}
{{/ questions }}

Then each question view/viewmodel/model would answer to is_input(), is_radio() and is_comment().

bobthecow
  • 5,047
  • 25
  • 27
  • 1
    This is exactly what I ended up doing while setting the is_input or is_radio to true/false and passing the partials parameter to the view. – Churchill Feb 21 '15 at 07:17