感谢@denisnazarov追踪了这一事件。
pingseñor @machty
@machty我们可以在此方面使用您的帮助
因此,在昨晚苦苦挣扎之后,我不确定这是否完全不受欢迎。 假设您有以下控制器。
App.MyController = Ember.Controller.extend({
queryParams: ['filters'],
filters: ['starred']
});
如果将filters
为null
并刷新页面,则预期的行为是什么? 如果您不将null
序列化为url,则controller属性将设置为其默认值。
这类似于先前实现中的问题,即在虚假值和实际值false之间存在歧义。 现在似乎在defaultValue
和null
或undefined
之间是模棱两可的。
这是另一个使用布尔查询参数的示例: http :
如果默认值设置为null
,则将其设置为true
或false
实际上会将其设置为字符串版本'true'
或'false'
。
@HeroicEric那么将其设置为null
的引人注目的原因是,如果在生命周期中它将是布尔值true
/ false
呢?
那可能是错的。 我很好奇所有这些序列化案例的用例是什么。
@machty我试图在
例如,我正在显示用户列表,并且希望能够对其进行过滤,以便该列表包含“所有用户”,“管理员用户”或“非管理员用户”。 当我想查看所有用户时,我基本上只是删除过滤器。
这样的情况不是查询参数的意思吗?
理想情况下,URL应该是这样的:
/ users显示所有用户
/ users?admin = true显示所有管理员
/ users?admin = false显示所有不是管理员的用户
@HeroicEric @machty我认为这个想法是,如果未定义控制器上的defaultValue( null
或undefined
),它将默认使用字符串。 这可以解释为什么true
和false
最终以其字符串版本结尾,因为序列化默认为字符串。
我认为,如果您希望将某个属性设置为null
那么我们需要从其他地方获取该类型。 @machty这是将类型添加到路由中的queryParams
配置中的一个好理由吗?
如果我们有此选项,则可以将类型设置为'boolean
,并将默认值设置为null
。
我有这个JSBin示例,不知道我看到的内容是否与此问题有关:
http://jsbin.com/dipajezi/1/edit
基本上,我有一个带有默认值null
foo
查询参数,并且在应用程序启动时第一次调用我的模型挂钩时,该参数的值为null
。 当参数值为null
,我不想使用此参数来查询服务器,因为它表示“无值”。
查询: ?page=1
当我单击NextPage按钮时,我再次转换,但是这次我更改了page
查询参数。 这次foo
查询参数的字符串值为"null"
,这有点奇怪。 在这种情况下,我仍然希望具有null
,以便可以轻松地验证该参数没有值。
查询: ?page=1
而不是?page=1&foo=null
最后,当我单击ChangeFoo
按钮时,我再次转换,这一次将foo
查询参数的值设置为任何值。 现在该值不为空,我可以使用该值来构造我的查询字符串。
查询?page=1&foo=3
@raytiley刚刚在https://github.com/raytiley/ember.js/commit/26a3f8569edb58f8644ce4f9cec7000276c327a6#diff -0631ecfe6138cf2c2eb2d94369c3e846R1640上写了一条便条。
如果我将qp显式设置为null
,那么它将被转换为模型挂钩中的字符串。 这似乎不太正确,因为null
应该表示“无值”,如果一个人确实想要空字符串,那么他们可以根据值null
创建它。
否则,如果要传递仅包含值的QP,则必须执行params.myQP && params.myQp !== "null"
..
我认为这已经过时了,但是如果有人可以在使用以下ember.js的JSBin中演示该问题,它将重新打开: http ://s3.amazonaws.com/machty/to_s3_uploads/ember-9fbe6c2a-c124-5c2e-0414
_以防有人通过Google找到此内容。_
该问题已基本解决,但仍然存在一个极端情况:如果未在控制器上设置查询参数,它将把null
序列化为'null'
。
var AnimalsController = Ember.Controller.extend({
queryParams: ['myCat']
// myCat: null // deliberately not set, to illustrate the issue
});
export default AnimalsController;
由于QP何时允许设置类型? 还是只是提议一个新的API?
它似乎没有记录。 放眼这里,似乎可以被覆盖。
哦,那很好!
谢谢@allthesignals ,它对您的解决方案很有帮助。
这个解决方案怎么样?
{ key: undefined }
到?
_(不包括)_
{ key: null }
至?key
{ key: '' }
至?key=
{ key: 'null' }
至?key=null
好名单!
我为此投票:
{ key: undefined }
到[nothing]
_(不包括)_
{ key: null }
至[nothing]
_(不包括)_
{ key: '' }
至?key
{ key: 'null' }
至?key=null
可能还有:
{ key: false }
至[nothing]
_(不包括)_
{ key: true }
至?key
最有用的评论
_以防有人通过Google找到此内容。_
该问题已基本解决,但仍然存在一个极端情况:如果未在控制器上设置查询参数,它将把
null
序列化为'null'
。