2013-10-04 55 views
0

我有以下設置。 每個帳戶可以有多個配置文件Ember - 如何從父路由鏈接到子路由時,都有陣列控制器?

app.js:

App.Router.map(function() { 
    this.resource("accounts", function() { 
     this.resource("profiles", {path: "/:account_id"}) 
    }) 
}); 

App.Account = Ember.Object.extend({ 
    findAll: function() { 
     // Ajax request to fetch data from the server 
    } 
}); 

App.AccountsRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Account.findAll(); 
    } 
}); 

App.Profile = Ember.Object.extend({ 
    findAll: function() { 
     // Ajax request to fetch data from the server 
    } 
}); 

App.ProfilesRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Profile.findAll(); 
    } 
}); 

accounts.hbs:

{{#each model}} 
    {{#linkTo "profiles" tagName="li"}} 
     {{accountName}} 
    {{/linkTo}} 
{{/each}} 
{{outlet}} 

profiles.hbs:

{{#each model}} 
    {{profileName}} 
{{/each}} 

但是,這是行不通的。每當我點擊其中一個帳戶名稱時,什麼都沒有出現在插座中。如果我在{{#linkTo「profiles」this tagName =「li」}}中傳遞「this」,那麼我收到一條錯誤消息,指出Ember無法循環通過非Array的東西。當他們都有數組控制器並且子模板顯示在父級插座中時,如何從父級路由鏈接到子級路由?

+0

你還想要一個特定配置文件的路線嗎? – chopper

+0

是的。所以首先用戶點擊賬戶列表中的一個項目,然後顯示該賬戶的配置文件列表。然後,用戶將選擇一個配置文件,該配置文件可能會出現在另一個插座。 – cwarny

+0

我假設你的'App.Account'具有'個人檔案:DS.hasMany('App.Profile')'? – chopper

回答

0

菜刀的答覆工作,如果已經獲取的帳戶對象已嵌入了配置文件列表。然而,在我的設置中並非如此(可能我沒有足夠清楚)。我解決這個問題的方法是通過在帳戶路由中設置一個操作哈希,並使用「fetch_profiles」操作處理程序,從帳戶路由觸發並將點擊的帳戶作爲操作參數傳遞。該操作通過AJAX調用檢索配置文件列表,然後將應用重定向到配置文件路由。所以我沒有在這種情況下使用鏈接幫助器。

1
App.Router.map(function() { 
    this.resource("accounts", function() { 
     this.resource("account", {path: "/:account_id"}) 
      this.resource("profiles", function() { 
       this.resource("profile", {path: "/:profile_id"}) 
      } 
     } 
    }) 
}); 

App.Account = Ember.Object.extend({ 
    findAll: function() { 
     // Ajax request to fetch data from the server 
    } 
}); 

App.AccountsRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Account.findAll(); 
    } 
}); 

App.Profile = Ember.Object.extend({ 
    findAll: function() { 
     // Ajax request to fetch data from the server 
    } 
}); 

accounts.hbs:

{{#each content}} 
    {{#linkTo "account" this tagName="li"}} 
     {{accountName}} 
    {{/linkTo}} 
{{/each}} 
{{outlet}} 

account.hbs:

{{#each profiles}} 
    {{profileName}} 
{{/each}} 
+0

不工作。顯示/#/ accounts路徑中的帳戶列表,但是當我點擊其中一個帳戶時,URL將更改爲/#/ accounts/undefined,因此沒有模型似乎用於新路線。我在RESTAdapter中使用了ED,並定義了以下模型:'App.Account = DS.Model.extend({\t profiles:DS.hasMany(「App.Profile」), \t name:DS.attr(「string」) '和'App.Profile = DS.Model.extend({ }};''和'App.Profile = DS.Model.extend({0128}}。), \t name:DS.attr(「string」) });''我也像你一樣設置了路由器,在你定義的App.ProfilesRoute中,它是如何知道要使用哪個帳戶的模型? – cwarny

+0

嘗試增加'App.ProfileRoute = Ember.Route.extend({ 模型:函數(){ 回報this.modelFor( '曲線');} });' – chopper

+0

沒有幫助我將承擔灰燼我不認爲我們需要明確指出配置文件路由與配置文件模型有關 – cwarny