2013-02-10 71 views
-1

我擁有帶Ember Data的簡單Ember應用程序(由Rails支持)。我創建了這些路線:將內容傳遞給內部視圖{{outlet}}

App.Router.map(function() { 
    this.resource('bands', function() { 
     this.route('new'); 
     this.resource('band', {path: ':band_id'}, function() { 
      this.route('edit'); 
     }); 
    }); 
}); 

然後,當我去http://localhost:3000/#/bands/23/edit,我想看到的物體的值與ID 23,像這樣:

<div>name: {{name}}</div> 
{{! should output "name: Pavel" }} 

然而,當我將該代碼放入band/edit.hbs,應用程序僅顯示「name:」,沒有任何價值。我發現這是因爲內容沒有傳遞給內部視圖。當我將同一段代碼直接放入band.hbs時,一切都按預期工作。我在哪裏做錯了?我如何將內容對象傳遞給控制器​​? (如果可能,我想盡可能多地生成控制器)。

回答

1

你必須至少定義BandEdit的路線:

App.BandEditRoute = Ember.Route.extend({ 
    model: function(params) { 
    return this.modelFor('band')); 
    } 
}); 

如果需要,你可以返回之前的模式總是添加到交易。

你也可以通過在BandEdit控制器中引用parentController來做到這一點,但這似乎是一個不太好的方法來解決這個問題。

+0

謝謝你,夥計。這解決了我的問題! – 2013-02-10 18:13:10

+0

那麼,你的解決方案似乎有一個小問題。現在,當我在'http:// localhost:3000 /#/ bands/23/edit'刷新時,什麼都不顯示。當我刪除'BandEditRoute'(所以我讓Ember爲我生成它),它工作正常。我怎樣才能解決這個問題? – 2013-02-10 18:20:04

+1

最有可能的錯誤:https://github.com/emberjs/ember.js/issues/2026 – Wildhoney 2013-02-10 21:18:00

1

這是因爲context已經被你內心的看法(上下文現在將視圖本身),但認爲將有機會獲得BandEditController及其相關的模型,因此改變,如果你總是參考model首先,Ember會知道你在做什麼:{{model.name}}/{{model.genre}}

見的jsfiddle:http://jsfiddle.net/JZ84L/

(與安德烈的答案一起使用,因爲如果你不即使透過modeloutlet那麼它是不可用的。)

+0

謝謝你,你幫了我很多!不幸的是,我只能接受1個答案... – 2013-02-10 18:13:43

+1

沒問題,我很高興它幫助你。我一直試圖回答你的問題,有一天我會有一些運氣! – Wildhoney 2013-02-10 20:19:55