You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ember Starter Kit从Ember 1.8.1升级到1.9遇模板错误求助

解决Ember 1.9 + Handlebars 2.0升级中的“Unknown template object: function”错误

首先,核心问题在于你当前使用原生Handlebars编译器来编译模板,但Ember 1.9+需要使用专门的Ember模板编译器,而不是原生Handlebars的编译工具。Ember对Handlebars有定制封装,直接用原生Handlebars编译出的模板格式和Ember期望的不匹配,才会抛出“Unknown template object: function”这个错误。

下面是无需大量重构的分步解决方案:

1. 安装匹配版本的Ember模板编译器

你需要安装与Ember 1.9.x版本完全一致的ember-template-compiler,而不是依赖原生Handlebars。比如如果你的Ember版本是1.9.1,执行:

npm install --save-dev ember-template-compiler@1.9.1 gulp-ember-template-compiler

(gulp-ember-template-compiler是封装好的Gulp插件,能直接调用Ember的编译器处理模板)

2. 重构你的Gulp模板编译任务

移除之前用gulp-handlebars、wrap、declare的逻辑,改用Ember专用的编译插件,它会自动生成Ember可识别的模板格式并注册到你的命名空间:

gulp.task('templates', function () {
  return gulp.src(paths.dev.templates + '**/*.hbs')
    // 使用gulp-ember-template-compiler编译
    .pipe(require('gulp-ember-template-compiler')({
      namespace: 'TM.TEMPLATES', // 保持你原有的命名空间
      compiler: require('ember-template-compiler') // 指定我们安装的Ember编译器
    }))
    .pipe(concat('templates.js'))
    .pipe(gulp.dest('public/app'));
});

为什么之前的写法不行?因为你用原生Handlebars编译后又包裹了Handlebars.template(),但Ember需要的是经过它自己编译器处理后的模板对象,不是原生Handlebars的模板函数。

3. 调整依赖加载顺序

确保你的all任务中脚本加载顺序正确,这对Ember的依赖解析至关重要:

gulp.task("all", function(){
 return gulp.src([
   paths.dev.vendor + "jquery/dist/jquery.js",
   paths.dev.vendor + "handlebars/handlebars.js", // Handlebars 2.0运行时(保持这个版本)
   "./node_modules/ember-template-compiler/lib/main.js", // 必须在Ember之前加载
   paths.dev.vendor + "ember/ember.js", // Ember 1.9.x核心库
 ])
 .pipe(concat("all.js"))
 .pipe(gulp.dest("public/js/"));
});

注意:ember-template-compiler必须在Ember核心库之前引入,否则Ember无法正确初始化模板系统。

4. 清理旧编译文件并验证

  • 删除public/app/templates.js旧文件,避免缓存干扰
  • 重新运行Gulp任务,编译新的模板文件
  • 打开应用,检查控制台是否还有报错

额外排查点

  • 确认你的Ember版本确实是1.9.x,没有引入其他版本的Ember库
  • 检查模板文件中是否有Handlebars 2.0不兼容的语法(比如旧的{{#each item in model}}语法在Handlebars 2.0中已被废弃,但Ember 1.9仍兼容,不过如果有极端情况可能需要微调)

内容的提问来源于stack exchange,提问作者Jetchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:10:23