Paul
Paul

Reputation: 79

handlebar compilation errors

Hi I have been trying to use backbonejs and handlebar templates but seems like either my jSON is wrong or data is not properly parse . Getting

Uncaught Error: You must pass a string to Handlebars.compile. You passed undefined

Code can be found at

jsfiddle

any advice will be appreciated

Upvotes: 0

Views: 5933

Answers (1)

mu is too short
mu is too short

Reputation: 434945

Your fiddle is broken in various ways but the odds are that you're doing this:

template: Handlebars.compile($('#tpl-page-list-item').html()),

before there is a #tpl-page-list-item available. This will happen if your page looks like:

<script src="your_backbone_javascript.js"></script>
<script id="tpl-page-list-item" ...></script>

as your Backbone view will be parsed before <script id="tpl-page-list-item"> gets added to the DOM. You can wrap your Backbone views in a document-ready handler (with proper namespacing to account for the function wrapper):

$(function() {
    window.PageListItemView = Backbone.View.extend({
        template: Handlebars.compile($('#tpl-page-list-item').html()),
        //...
    });
});

or compile the template when instantiating your view:

initialize: function() {
    // Or check if it is in the prototype and put the compiled template
    // in the prototype if you're using the view multiple times...
    this.template = Handlebars.compile($('#tpl-page-list-item').html());
    //...
}

Upvotes: 6

Related Questions