2014-01-08 85 views
2

在我的Ember應用程序在這裏努力工作,並且運行良好。然而,我遇到了一個意外行爲的問題,我不確定這個問題的最佳方法。Ember渲染模板繼電器模型

問題是,在一個特定的路線,我想渲染另一個路線到另一個插座。但是,我渲染到另一個插座的另一條路線不保留它自己的模型。

如果我這樣做:

App.TestRoute = Ember.Route.extend({ 
    model: function() { 
     return { 
      heading: "Test", 
      testContent: "This is test." 
     } 
    } 
}); 

App.IndexRoute = Ember.Route.extend({ 
    renderTemplate: function() { 
     this.render("test", { 
      outlet: "left" 
     }); 

     this.render({ 
      outlet: "right" 
     }); 
    }, 

    model: function() { 
     return { 
      heading: "Index", 
      indexContent: "This is index." 
     } 
    } 
}); 

...並訪問IndexRoute,我預計TestRoute的模型被渲染成TestRoute的模板,但只有IndexRoute的模型中繼到兩個模板。

小提琴這裏http://jsfiddle.net/3TtGD/1/

如何允許灰燼用於路由默認的模型,而無需意味深長合併嗎?這似乎很乏味。

此外,具有某些模型屬性的相同名稱,如{{heading}}是可取的,但並非必要。

解決此問題的最佳方法是什麼?

謝謝你的時間。

最好的問候, dimhoLt

+0

我只是看看這個,Ember建議你爲需要不同模型的模板設置不同的控制器,參見:[link] http://emberjs.com/guides/routing/rendering-a -template /通常我會使用一個商店,從那裏你可以訪問記錄和控制器使用'setupController' – baerli

+0

這解決了我的問題。謝謝! –

回答

4

renderTemplate方法你告訴灰燼來呈現出口內的模板,但它只會默認控制器到一個管理路由。鑑於它是處理路線的控制器,它有意義地管理該路線中的所有模板。

當然,你可以使用指定一個不同的控制器:

this.render("test", { 
    outlet: "left", 
    controller: 'test' 
}); 

它可以反過來你已經實例化一個控制器(也許設置它的content):

var testController = this.controllerFor('test'); 
testController.set(....) 
this.render("test", { 
    outlet: "left", 
    controller: testController 
}); 

關於使用模型:您可以在路線內呼叫this.modelFor('test'),它將返回test路線的模型(它甚至知道它是否已被解決)。當我需要訪問其中一條父路線的模型時,我通常會這樣做。

我相信訪問父路線的模型是有意義的,但是如果您訪問不相關路線的模型則不會太多。你爲什麼不要merge這兩種模式?

+0

感謝您的回覆,edpaez。我的網站是非常模塊化的,而且我現在有一個針對每個模塊的特定路線,而這個路線又可以被渲染成(當前)兩個不同網點中的一個。這只是不同模塊的特定組合。不管在這裏使用路線是否正確,或者如果路線基本上只是路徑和模型等,而這些路線和模型等應該在那個時候產生,那麼我不知道,而最佳實踐建議總是不勝感激! –