最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - Precompiled handlebars template not working - Stack Overflow

matteradmin4PV0评论

I prepiled my handlebars template like this:

 handlebars tabs.hbs -f tabs.js

I load them like this:

 <script type="text/javascript" src="js/handlebars.runtime.min.js"></script>
 <script type="text/javascript" src="js/templates/tabs.js"></script>
 <script type="text/javascript" src="js/tabsData.js"></script>

This is how I provide the context to the prepiled template:

var template=Handlebars.templates["tabs.hbs"];
var html=template(tabsData);
console.log(html)
sidebar.setContent(html);

I get this error:

Uncaught TypeError: undefined is not a function    handlebars.runtime.js 436
 /*Error points here*/
 var result = templateSpec.call(
        container,
        namespace, context,
        helpers,
        partials,
        options.data);

This is template:

  function (context, options) {
  options = options || {};
  var namespace = options.partial ? options : env,
      helpers,
      partials;

  if (!options.partial) {
    helpers = options.helpers;
    partials = options.partials;
  }
  var result = templateSpec.call(
        container,
        namespace, context,
        helpers,
        partials,
        options.data);

  if (!options.partial) {
    env.VM.checkRevision(containerpilerInfo);
  }

  return result;
} 

I prepiled my handlebars template like this:

 handlebars tabs.hbs -f tabs.js

I load them like this:

 <script type="text/javascript" src="js/handlebars.runtime.min.js"></script>
 <script type="text/javascript" src="js/templates/tabs.js"></script>
 <script type="text/javascript" src="js/tabsData.js"></script>

This is how I provide the context to the prepiled template:

var template=Handlebars.templates["tabs.hbs"];
var html=template(tabsData);
console.log(html)
sidebar.setContent(html);

I get this error:

Uncaught TypeError: undefined is not a function    handlebars.runtime.js 436
 /*Error points here*/
 var result = templateSpec.call(
        container,
        namespace, context,
        helpers,
        partials,
        options.data);

This is template:

  function (context, options) {
  options = options || {};
  var namespace = options.partial ? options : env,
      helpers,
      partials;

  if (!options.partial) {
    helpers = options.helpers;
    partials = options.partials;
  }
  var result = templateSpec.call(
        container,
        namespace, context,
        helpers,
        partials,
        options.data);

  if (!options.partial) {
    env.VM.checkRevision(container.pilerInfo);
  }

  return result;
} 
Share Improve this question edited Jul 9, 2014 at 14:30 vamsiampolu asked Jul 8, 2014 at 17:45 vamsiampoluvamsiampolu 6,70420 gold badges90 silver badges194 bronze badges 5
  • you'll need to figure out which item is undefined. – Mike Cheel Commented Jul 8, 2014 at 17:54
  • @MikeCheel Calling template(tabsData) throws this error,I trying using the same context and piling it on tryhandlebarsjs. where it works. – vamsiampolu Commented Jul 9, 2014 at 4:54
  • What do u get for console.log(template) – blessanm86 Commented Jul 9, 2014 at 12:49
  • @blessenm Added the template code... – vamsiampolu Commented Jul 9, 2014 at 14:31
  • I think Handlebars.templates["tabs.hbs"] is returning undefined. Check if Handlebars.templates has ur template and if the key 'tabs.hbs' si correct. – blessanm86 Commented Jul 9, 2014 at 15:01
Add a ment  | 

1 Answer 1

Reset to default 4

As biomorgoth mented here: https://stackoverflow./a/22214119

Make sure your npm version corresponds to the client version. Client version is in the the top of the js file and you find npm version with:

npm list -g | grep handlebars

installing the 1.3.0 version with npm solved the issue for me.

sudo npm install -g [email protected]
Post a comment

comment list (0)

  1. No comments so far