如何将预编译模板显示到特定视图

时间:2014-10-02 17:36:43

标签: ember.js routes handlebars.js router

有人可以帮助我如何将生成的预编译把手显示到特定视图吗?

var aboutData = [{...},...];

App.Router.map(function() {
   this.resource('about);
});


// When navigating to url: www.../#/about
// This whole thing generates a view appended to the body
// I want the generated handlebars to be appended somewhere specific
App.aboutDataRoute = Ember.Route.extend({
  model: function() {
     return aboutData;
  }
});

1 个答案:

答案 0 :(得分:1)

有几件事:

Naming Conventions:由于您在About中创建了about资源,因此应该将您的路由称为Router。路径名称将匹配如下结构:

App.Router.map(function() {
    this.resource('about', function() {
        this.route('data');
    });
});

在这种情况下,你会有一些隐含的路由以及你将以声明方式创建的路由(更多关于它hereherehere,尽管第二个链接是旧的)。但基本上,使用此路由器定义,名称AboutDataRoute将起作用,因为根据惯例,此名称将连接父(About)和子(Data)路由的名称,并使用后缀Route。使用您定义的路由,一旦转到~/#/about,Ember将忽略您创建的路由类,并为该路由动态生成默认实现(您可以使用inspector查看),因为这与惯例不符。

Case Sensitivity:通常,您应该使用PascalCase来命名大多数内容,但您的身份是camelCase。请尝试阅读有关命名约定的更多信息。


至于你的问题,你可以在不同的元素中渲染应用程序,没问题。只是body被设置为Application#rootElement中的默认值。您可以这样更改:

App = Em.Application.create({
    rootElement: '#selector'
});

其中#selector在这种情况下可以是DOM中的任何元素。

请记住,应用程序视图应该在“this”或“that”DOM元素中呈现。所有其他视图都是应用程序视图的某种类型的子项(直接或间接),因此它们将在{{outlet}}中呈现,因此您应该在Application具体类中执行此操作。