繁体   English   中英

ember.js-路由器v2模板路径

[英]ember.js - router v2 template path

我正在看路由器v2,发现必须像这样声明模板的完整路径:

WZ.ApplicationRoute = Em.Route.extend
  renderTemplate: ->
    @render('app/templates/nav/nav', outlet: 'nav')

我可以使用temmplateName属性创建视图,但我真的不想这样做。

有没有办法我可以像这样定义模板:

@render('nav', outlet: 'nav')

在典型的环境中,渲染模板时无需指定完整路径。 灰烬没有做任何魔术。 它检查Ember.TEMPLATES具有指定名称的Ember.TEMPLATES 启动您的应用程序,然后从JS控制台尝试:

Ember.keys(Ember.TEMPLATES)

我的猜测是您的模板将位于app/templates/nav/nav而不是nav下。

如何解决此问题取决于您用于编译车把模板的东西。 大多数构建系统将允许您指定模板名称的基本路径。

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的约定)。

更新,8.2.2013-在评论中回答@sudhanshu的问题

使用模板的默认方式是为您的应用程序配置路由器:

App.Router.map(function() {
  this.route("members");
  this.route("member",     { path: "/members/:refId" } );
  this.route("membernew",  { path: "/member/new" } );
});

上面的小示例显示了路由器的3个功能:

  • “成员”仅是名称,并采用约定,即未定义路径。 因此,emberjs将自动使用该路径的/members
  • “成员”使用动态URL部分以标识资源并加载正确的成员。 在这里,您必须定义路径。
  • “ membernew”还定义了路径,因为我不想使用默认值/membernew

按照相同的约定,emberjs将尝试使用您在路由器中定义的名称加载模板。 在上面的示例中,emberjs期望车把模板具有名称“ members”,“ member”和“ membernew”。

上面未显示的功能是将路由级联到资源中。 请访问http://emberjs.com/guides/routing/。emberjs团队针对该主题撰写了非常不错的指南。

因此,通常emberjs基于一些不错的约定,使您可以避免很多编码行。 但是,您必须遵守约定。 对于更复杂的应用程序,这通常是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM