JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – Ember.js如何引用Grunt.js预编译的Handlebars模板?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在探索Ember.js,以及Grunt.js,但是我不明白Ember.js如何能够找到并使用预编译的Handlebars模板.现在我的Gruntfile.js看起来像这样: @H_57_2@module.exports = function(grunt) { // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'),handlebars: { compile: { files: { "js/templates.js": "templates/*.hbs",} } } }); // Load the plugin that handles the handlebars compiling grunt.loadNpmTasks('grunt-contrib-handlebars'); // Default task(s). grunt.registerTask('default',['handlebars']); };

而我的app.js Ember视图被这样声明(路由和控制器被忽略):

App.LogoView = Ember.View.extend({
  templatename: 'logo',classNames: ['logo']
});

App.TabsView = Ember.View.extend({
  templatename: 'tabs',classNames: ['tabs']
});

App.TabView = Ember.View.extend({
  classNames: ['content'],tabPositions: {
    tab1: {
      width: '90px',left: '82px'
    },tab2: {
      width: '180px',left: '172px'
    },tab3: {
      width: '271px',left: '263px'
    }
  },animateTab: function() {
    var left,tab,width;
    tab = this.get('templatename');
    width = this.get('tabPositions.' + tab + '.width');
    left = this.get('tabPositions.' + tab + '.left');
    Ember.run.next(function() {
      $('div.tabs').removeClass('tab1 tab2 tab3');
      $('div.tabs').addClass(tab);
      $('div.slider div.foreground').stop().animate({
        'width': width
      },1000);
      $('div.slider div.handle').stop().animate({
        'left': left
      },1000);
    });
  },didInsertElement: function() {
    this.animateTab();
  }
});

App.SliderView = Ember.View.extend({
  templatename: 'slider',classNames: ['slider']
});

App.Tab1View = App.TabView.extend({
  templatename: 'tab1'
});

App.Tab2View = App.TabView.extend({
  templatename: 'tab2'
});

App.Tab3View = App.TabView.extend({
  templatename: 'tab3'
});

这是我的文件结构:

--/
  |--js/
    |--app.js
    |--ember.js
    |--handlebars.js
    |--jquery.js
    |--templates.js
  |--templates/
    |--application.hbs
    |--logo.hbs
    |--slider.hbs
    |--tab1.js
    |--tab2.js
    |--tab3.js
    |--tabs.js
  |--Gruntfile.js
  |--index.html
  |--package.json
  |--server.js

所以我使用< script type =“text / x-handlebars”data-template-name =“slider”>我的index.html文件中的语法通过名称引用模板,并且工作正常.我不明白的是,Ember.js应该如何使用预编译的模板.

现在,我使用Grunt.js来编译它们,并将它们输出到templates.js.根据Ember文档,当应用程序加载时,它将查找应用程序模板.与index.html以及通过更改模板的文件名一起使用的是更改模板的名称吗?有人指出Ember.js使用预编译模板的方向正确吗?谢谢!

解决方法

Ember希望将编译的模板添加到Ember.TEMPLATES属性中.当加载了一个ember应用程序时,它会检查任何句柄脚本标签并进行编译.然后,使用指定的data-template-name属性作为关键字,将每个模板添加到Ember.TEMPLATEs.如果没有提供数据模板名称,则将其密钥设置为应用程序.

除了那个余烬不在乎Ember.TEMPLATES如何进行.您可以手动添加/删除模板.例如,https://stackoverflow.com/a/10282231/983357演示了如何可以内联编译模板:

Ember.TEMPLATES['myFunkyTemplate'] = Ember.Handlebars.compile('Hello {{personNamE}}');

现在显然你不想以这种方式写你的模板,你想咕噜为你做,但是你可以看到没有任何魔法.

Ember不关心模板的文件名,它只是关心Ember.TEMPLATES [‘key / goes / here]中使用什么字符串作为关键字.也就是说,使用filename作为模板的关键是非常有意义的.

我想你的项目缺少的可能是编译的模板没有被添加到Ember.TEMPLATEs. AFAIK的grunt-contrib-handlebars插件不这样做.虑使用grunt-ember-templates.

大佬总结

以上是大佬教程为你收集整理的javascript – Ember.js如何引用Grunt.js预编译的Handlebars模板?全部内容,希望文章能够帮你解决javascript – Ember.js如何引用Grunt.js预编译的Handlebars模板?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。