2014-10-08 172 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