私はGrunt.jsと一緒にEmber.jsを探索してきましたが、Ember.jsがプリコンパイルされたHandlebarsテンプレートをどのように見つけて使用できるのか理解できません。現在、私のGruntfile.jsは次のようになっています。
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
そのため、index.htmlファイルの構文を使用して<script type="text/x-handlebars" data-template-name="slider">
、名前でテンプレートを参照していますが、これは正常に機能します。私が理解していないのは、Ember.jsがプリコンパイルされたテンプレートをどのように使用することになっているのかということです。
現在、Grunt.jsを使用してそれらをコンパイルしており、templates.jsに出力されます。Emberのドキュメントによると、アプリケーションが読み込まれると、アプリケーションテンプレートが検索されます。それはindex.htmlでどのように機能し、テンプレートのファイル名を変更することで、テンプレートの名前を変更しますか?Ember.jsがプリコンパイルされたテンプレートをどのように使用するかについて誰かが私を正しい方向に向けることができますか?ありがとう!