2014-10-08 270 views
1

問:我如何傳遞型嵌套的對象

query: { 
    id: bla, 
    email: bla-bla-bla 
} 
在queryParams

的對象?

簡單的方式是這樣

App.ArticlesController = Ember.ArrayController.extend({ 
    queryParams: ['query'], 
    query: { 
    id: bla, 
    email: bla-bla-bla 
    } 
}); 

不起作用當然:)

P.S.的,對不起英文:)

回答

1

Ember查詢參數不支持將對象設置爲QueryParam。它只支持鍵值對。根據documentation

查詢參數是可選的鍵值對,出現在右邊的 的?在一個URL中。例如,以下網址有兩個查詢 參數,可以排序和網頁,用各自的值ASC和2:

如果你正在尋找綁定兩個idemail屬性的查詢字符串丘壑,你會必須明確指定:

App.ArticlesController = Ember.ArrayController.extend({ 
    queryParams: ['id, email'], 
    id: null, 
    email: null 
}); 

如果你真的要綁定的idemail直接到query對象,你可以設置一個觀察或計算財產(取決於你的目標),其觀察到任何的改變idemail屬性,然後更新本地有的其他對象。

如果您想簡化此設置,可以考慮使用Controller Mixin來定義queryParams中的一組公共屬性以及相應的數組。然後你可以做類似的事情:

App.ArticlesController = Ember.ArrayController.extend(MyQueryParamsMixin, { 
    queryParams: myQueryParams 
    // The other properties would be set explicitly from your Mixin 
    // Technically, you don't even need to declare the properties since they'll get bound anyway 
    // thanks to queryParams, but it's good practice to let readers of your Mixin know which properties 
    // are in use. 
}); 
+0

也許,那麼告訴我,你如何在Ember中製作複雜的遠程過濾器?而這仍然是元。 只是,與queryParams你會在地址欄查詢寫這樣的 '''?過濾器[牧師] [名] =伊萬和過濾器[人] [年齡] = 666''' 併發送一個請求'''store.findQuery'''。很簡單! – 2014-10-09 09:39:51

+0

可能有其他方法可以做到這一點,但我總是隻綁定一個queryParam屬性,然後在我的控制器中,我將這些屬性翻譯成更復雜的東西。例如。 '?filters [person] [name] = Ivan'成爲'?name = Ivan',然後在我的控制器中我知道「Ivan」將被綁定到'name'屬性。然後,我可以使用觀察者或計算屬性來觀察'name',如果它發生變化,則更新其他對象。這種靈活性意味着「鍵 - 值對」限制根本不是一個限制,因爲您可以隨時觀察任何已更改的值。 – 2014-10-09 14:54:17