Reputation: 10485
I am using mustache.php (Kohana's KOstache) to populate my form values with persistence. My template is something along the lines of this:
<input type="checkbox" id="copy-billing-address"><span>My billing address is the same as my shipping address</span><br />
<label for="project[billing-organization]" class="pb-label">Organization:</label> <input type="text" name="project[billing-organization]" value="{{#field_data}}{{billing-organization}}{{/field_data}}" />
{{#errors}}{{#billing-organization}}<span class="validation-error">{{billing-organization}}</span>{{/billing-organization}}{{/errors}}
<label for="project[billing-address-1]" class="pb-label">Address:</label> <input type="text" name="project[billing-address-1]" value="{{#field_data}}{{billing-address-1}}{{/field_data}}" />
{{#errors}}{{#billing-address-2}}<span class="validation-error">{{billing-address-2}}</span>{{/billing-address-2}}{{/errors}}
<label for="project[billing-city]" class="pb-label">City:</label> <input type="text" name="project[billing-city]" value="{{#field_data}}{{billing-city}}{{/field_data}}" />
{{#errors}}{{#billing-city}}<span class="validation-error">{{billing-city}}</span>{{/billing-city}}{{/errors}}
etc...
I'm curious to know if there is a way / what's the best way that I can access and use the mustache data that PHP is returning to populate the values of the template. For example:
<?php $view->jsondata = json_encode($array); ?>
//javascript
var template = $("#billing-address").innerHtml();
var data = {{jsondata}}
html = Mustache.to_html(template, data);
template.innerHtml(html);
How can I send {{jsondata}}
to my javascript using mustache.php?
Upvotes: 2
Views: 1963
Reputation: 15579
you need to use an XHR request to do the same or if this happens during page load store the json in a javascript variable when the page is rendered and when the page is initialized call mustache to render your markup.
in php you do something as follows: (forgive me I am not familiar with php syntax)
<script>
var globalData= <?php //out json_encode($array); ?></script>
and your template should live in a script tag as follows:
<script id="billing-address" type="tmpl/js" >
<input type="checkbox" id="copy-billing-address"><span>My billing address is the same as my shipping address</span><br />
<label for="project[billing-organization]" class="pb-label">Organization:</label> <input type="text" name="project[billing-organization]" value="{{#field_data}}{{billing-organization}}{{/field_data}}" />
{{#errors}}{{#billing-organization}}<span class="validation-error">{{billing-organization}}</span>{{/billing-organization}}{{/errors}}
<label for="project[billing-address-1]" class="pb-label">Address:</label> <input type="text" name="project[billing-address-1]" value="{{#field_data}}{{billing-address-1}}{{/field_data}}" />
{{#errors}}{{#billing-address-2}}<span class="validation-error">{{billing-address-2}}</span>{{/billing-address-2}}{{/errors}}
<label for="project[billing-city]" class="pb-label">City:</label> <input type="text" name="project[billing-city]" value="{{#field_data}}{{billing-city}}{{/field_data}}" />
{{#errors}}{{#billing-city}}<span class="validation-error">{{billing-city}}</span>{{/billing-city}}{{/errors}}
</script>
<div id="123"> </div> //div that you want to insert the markup tp
$(document).ready(function(){
var template = $("#billing-address").html(); //use jquery methods when possible
html = Mustache.to_html(template, globalData);
$("#123").html(html);
});
and you shoud be good to go.
The XHR way using Jquery ajax method.
$.ajax(
{
url: "getJson.php",
data: {id:123}, // data optional,
type: "GET", //or POST depending on what you need
dataType:"json", //data you are receiving from server
success: function(jsonData)
{
var template = $("#billing-address").html(); //use jquery methods when possible
html = Mustache.to_html(template, jsonData);
$("#123").html(html);
}
});
Upvotes: 2