Ember 使用它的约定来查找模板,它可以是直接的名称,也可以是名称的路径。如果您只键入 nav,则 ember 会假定它是名称。
最好的文档总是源代码,在这种情况下是(文件:packages/ember-routing/lib/system/route.js):
render: function(name, options) {
if (typeof name === 'object' && !options) {
options = name;
name = this.routeName;
}
name = name ? name.replace(/\//g, '.') : this.routeName;
var container = this.container,
view = container.lookup('view:' + name),
template = container.lookup('template:' + name);
if (!view && !template) { return; }
this.lastRenderedTemplate = name;
options = normalizeOptions(this, name, template, options);
view = setupView(view, container, options);
appendView(this, view, options);
}
对你的问题的回答是一行
name = name ? name.replace(/\//g, '.') : this.routeName;
因此,ember 的模板名称可以是您为模板指定的名称,也可以是基于所有斜杠转换为点的路径的名称(按照 ember 的约定)。
2013 年 2 月 8 日更新 - 回答 cmets 中 @sudhanshu 的问题
模板的默认使用方式是为您的应用程序配置路由器:
App.Router.map(function() {
this.route("members");
this.route("member", { path: "/members/:refId" } );
this.route("membernew", { path: "/member/new" } );
});
上面的小例子展示了路由器的 3 个特性:
- “members”只是名称并应用约定,即没有定义路径。因此,emberjs 将自动使用路径
/members。
- “成员”使用动态 URL 部分来识别资源并加载正确的成员。在这里,您必须定义路径。
- "membernew" 还定义了路径,因为我不想使用默认值
/membernew
按照相同的约定,emberjs 将尝试使用您在路由器中定义的名称加载模板。在上面的示例中,emberjs 期望车把模板具有名称“members”、“member”和“membernew”。
上面没有显示的一个功能是将路由级联到资源中。请查看http://emberjs.com/guides/routing/ emberjs 团队就该主题写了一个非常好的指南。
所以,总的来说,emberjs 是基于一些很好的约定,可以让您避免许多编码行。但是,您必须遵守约定。对于更复杂的应用程序,这通常是不可能的。