2014-10-02 97 views
1

任何人都可以帮助我如何将生成的预编译图柄显示到特定视图?如何将预编译模板显示到特定视图

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

几件事情:

Naming Conventions:您的路线应该叫About因为你在Router创建about资源。路线名称将匹配到一个结构如下所示:

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具体类中执行此操作。

+0

我明白了......我只是最近在练习烬。这清除了我的大部分问题,我想都是。谢谢。无论如何,在使用Ember.View时,是否也可以指定插入DOM的位置? ex。 App.AboutView = Ember.View.extend({ember.TEMPLATE.about //这是已经预编译的句柄条 }); – meetmahpuppy 2014-10-02 20:54:36

+0

如果遵循约定,则不必指定视图的模板,因为它会找到匹配的名称并自动使用该模板。顺便说一句,你的模板总是被编译的,问题是你可以*预先编译它们,或者把它们作为你的html文档的一部分,然后在初始化时你的应用。因此,如果您仍然需要为视图手动指定模板,请关注[docs](http://emberjs.com/guides/views/inserting-views-in-templates/)并使用诸如'templateName:'之类的内容-name'' – MilkyWayJoe 2014-10-02 23:26:15