2014-02-14 87 views
2

我有一個應用程序有兩個插座(位於application.hbs中),其中 - 第二個渲染視頻的網格顯示,無論您在哪條路線上,但視頻顯示的內容可能會改變。模型」更改路線時重新渲染模板

App.Video = DS.Model.extend({ 
    ... 
    frontpage: DS.attr('boolean'), 
    ... 
}); 

的重要位所以,當我在最路線我想顯示在FrontPage視頻==真和一個路由我想顯示的所有視頻,不管是什麼頭版說。 我似乎已經得到了一半的工作 的重要路線是這樣的:

App.Router.map(function() { 
    this.resource('videos', { path: 'videos/' }, function() { 
     this.route('video', { path: ':video_id' }); 
    }); 
    ... 

而且我videos.index模板(這是我在第二個,命名爲出口呈現)是這樣的:

{{#each video in controller}} 
    {{log isFrontPage}} 
    <!--if we only want to display the frontpage-videos in the grid --> 
    {{#if isFrontPage}} 
    <!--show only videos with frontpage = true --> 
    {{#if video.frontpage}} 
     {{partial 'video-thumbnails'}} 
    {{/if}} 
    {{else}} 
    <!--show all videos, which will be used for the /videos site--> 
    {{partial 'video-thumbnails'}} 
    {{/if}} 
{{/each}} 

isFrontPage是ApplicationController中的一個屬性,它在正確的路由中被設置爲true/false。當我最初加載索引路線時,它一切正常,只需加載視頻frontpage==true,當我切換到/videos路線時,它一切正常,它會加載所有視頻。但是,無論我走什麼路線,它都保持不變。有趣的是,即使在/videos路由中顯示的視頻改變了,log命令也不會再打印任何東西。

而且,我現在用的是renderTemplate函數獲取的功能,這樣的事情在VideosIndexRoute

this.render('videos.index', { 
    outlet: 'videogrid', 
    into: 'videos.index', 
    controller: controller 
}); 

而在ApplicationRoute我有相同的,只是intocontroller都爲application路線。

因此,任何人都知道我可以如何使路由器級別的模板燼重新渲染?還是有什麼我失蹤,還有另一種/更好的方式來做到這一點?任何幫助真的很感激。

+0

找到了解決辦法。我現在簡單地擴展一個預先定義的路由,相應地設置isFrontpage和this.render。 – Markus

回答

1

好的,我找到了一個解決方案。問題是,ember只加載一次ApplicationRoute,所以renderTemplate方法再也沒有被調用過。我只是創建了一個所有其他路由擴展的Route對象,所以右邊的renderTemplate被調用了正確的路由。