2013-08-19 30 views
2

我在这里绕圈,尝试将所有组件拉到一起以产生所需的视图。我觉得好像我只需要调整表盘就可以把所有的焦点都集中在一起,但是现在它就包括我在内。ember.js:使用路径,模板和插座来渲染模型数据

我有两个模型 - 人员和地址 - 我已经创建了两个模板;然后我想在另一个“主”模板中渲染这两个模板。目前我还没有将它们连接起来(最终1人将拥有很多嵌套地址),因为我想先了解一般原理。

两个模板单独工作使用App.Router.map

this.resource('listOfPeopleTemplate', { path: '/' }); 

this.resource('listOfAddressesTemplate', { path: '/' }); 

却不能在一起,或者当我加入mainViewTemplate并尝试既能补充成:

App.Router.map(function() { 


    //this.resource('listOfAddressesTemplate', { path: '/' }); 
    //this.resource('listOfPeopleTemplate', { path: '/' }); 
    this.resource('mainViewTemplate', { path: '/' }); 
}); 

问题似乎集中在:

App.MainViewTemplateRoute = Ember.Route.extend({ 
    renderTemplate: function() {  
     this.render('listOfPeopleTemplate', {into: 'mainViewTemplate', outlet: 'peops'}); 
     this.render('listOfAddressesTemplate', {into: 'mainViewTemplate', outlet: 'address'}); 
    } 
}); 

返回的错误是“出口(人)被指定但未找到”;和“#each循环的值必须是数组..”。我可以看到,我可能需要为地址和人员的控制器做些事情,但我不知道是什么。事实是,我已经陷入了这样的混乱状态,我现在甚至无法获得最初的成功版本(地址或人员显示在他们自己的模板中)。

我做了以下小提琴http://jsfiddle.net/4gQYs/4/。请把我带入焦点!

回答

3

我希望我能理解你的问题!

我有两条路线地方

App.Router.map(function(){ 
    this.resource('people'); 
    this.resource('places'); 

}); 

我加载模型的两个控制器模型钩人民路线。

App.PeopleRoute=Ember.Route.extend({ 
    model:function(){ 
     var places=Em.A(); 
     $.getJSON("js/places.js").then(function(json){places.setObjects(json)}); 

     var placesController=this.generateController('places',places); 
     placesController.set('content',places); 

     var people=Em.A(); 
     $.getJSON("js/people.js").then(function(json){people.setObjects(json)}); 
     return people; 
    }, 

    renderTemplate:function(){ 
     this.render('people',{into:"application",outlet:"people"}); 
     this.render('places',{into:"application",outlet:"places"}); 
    } 
}); 

以下是不需要的。可能对显示一些相关数据有用。

App.PeopleController=Ember.ArrayController.extend({ 
    needs:'places' 
}); 

现在我在主应用程序模板中呈现这两个模板。

<script type="text/x-handlebars"> 
    <h2>Welcome to Ember.js</h2> 

    {{outlet people}} 
    {{outlet places}} 
    </script> 

    <script type="text/x-handlebars" data-template-name="people"> 

    {{#each controller}} 
     <p>{{name}}</p> 
    {{/each}} 
    </script> 

    <script type="text/x-handlebars" data-template-name="places"> 

    {{#each controller}} 
     <p>{{name}}</p> 
    {{/each}} 
    </script> 
+0

谢谢你。不过,我仍然没有任何喜悦。我已经使用你的代码转换我的代码来生成这个[小提琴](http://jsfiddle.net/zXJc5/11/)。唯一不同的是我使用Ember数据模型而不是一个烬数组。结果是我得到一个空白的回看,但没有错误。你能看到我要去哪里吗? – user2192333

+0

你能否检查这[[小提琴](http://jsfiddle.net/zXJc5/14/) – seenivasan

+0

啊哈...这是有效的,谢谢。你能告诉我我是否理解逻辑? Ember加载应用程序并首先查找IndexRoute(尽管我认为它是ApplicationRoute或者它是否都查找了这两个?)。 'redirect:function()this.transitionTo('people');}'告诉ember切换到人员路由;它将加载两个模型并使用这两个模板呈现到应用程序(默认)模板中。另一件令我不舒服的事情是通过设置PlaceController通过peopleRoute加载位置:它看起来有点拼凑,你不觉得吗? – user2192333