4

我有一个这样的路由器地图:

this.resource('eng', function(){
    this.route('home');
    this.resource('eng.rent', {path: 'rent' }, function(){
        this.route('boulderSmall', {path: 'boulder-small'});
        this.route('boulderXl', {path: 'boulder-xl'});
    });     
});

模板文件存储在“templates/eng”文件夹中;对于“home”和“eng.rent”路由,一切正常:Ember 可以自己找到模板文件的位置;但对于其他路线,我必须指定模板的位置,例如:

Importclimbing.EngRentBoulderSmallRoute = Importclimbing.StdEngRoute.extend({
    renderTemplate: function() {
        this.render('eng/boulderSmall');
    }
});

有人可以解释 Ember 如何查找模板文件吗?例如,如果我没有像上面那样为 EngRentBoulderSmallRoute 指定“renderTemplate”,则模板将不会呈现(即使我将“boulderSmall.hbs”文件放入“template”文件夹而不是“template/eng”;等等, Ember 默认在哪里查找此模板?如果我想将“boulderSmall.hbs”存储到“templates/eng/rent”文件夹中,我应该将哪个路径传递给 renderTemplate 函数?

4

2 回答 2

5

您的文件夹结构应如下所示。

首先,您需要重命名eng.rent路由rent,使路由器看起来像这样

this.resource('eng', function(){
    this.route('home');
    this.resource('rent', {path: 'rent' }, function(){
        this.route('boulderSmall', {path: 'boulder-small'});
        this.route('boulderXl', {path: 'boulder-xl'});
    });     
});

然后您的模板和文件夹应该以这种方式命名。

templates          ## this is a folder
  |--eng           ## this is a folder
      |--home.hbs
  |--rent      ## this is a folder
      |--boulder_small.hbs
      |--boulder_xl.hbs
  application.hbs
  eng.hbs
  rent.hbs

我希望这有帮助。干杯

于 2013-09-21T04:03:10.547 回答
3

最后我摆脱了这个;kiwiupower 的回答是正确的,因为 Ember 在文件夹和子文件夹中查找模板文件,如图所示;问题是由于我用于开发的 yeoman;在 gruntfile 中,默认设置仅通过一级文件夹查找 Ember 模板;

为了让 yeoman 能够更深入地了解模板文件夹结构,我进行了以下更改:

1到livereload的watch任务:

 emberTemplates: {
            files: '<%= yeoman.app %>/templates/**/**/*.hbs',
            tasks: ['emberTemplates', 'livereload']
        },

我添加了一个“**/”,以便让任务也监视模板目录中的第二级子文件夹

2 在 Ember 模板任务中:

 emberTemplates: {
        options: {
            templateName: function (sourceFile) {
                var templatePath = yeomanConfig.app + '/templates/';
                return sourceFile.replace(templatePath, '');
            }
        },
        dist: {
            files: {
                '.tmp/scripts/compiled-templates.js': '<%= yeoman.app %>/templates/{,*/}{,*/}*.hbs'
            }
        }
    }

在 dist.files 对象中添加了一个“{, /}”;如果需要 yeoman 监视/编译第三级或更多子文件夹,则需要修改这两个任务添加更多“ */”和“{,*/}”

于 2013-09-27T16:00:56.747 回答