我有我认为常见但复杂的模型问题。我有一个产品配置器,它有一系列按钮。每次用户单击按钮(对应于产品配置中的更改)时,URL都将更改,实际上会为该配置创建可收藏的状态。最重要的警告:在应用初始化之前,我不知道配置选项或值是什么。
我使用EmberCLI对此进行建模。经过大量研究后,我不认为尝试将这些直接折叠到路径组件中是一个明智的想法,我正在考虑使用新的Ember query string添加。这应该适用于允许书签,但我仍然有一个问题,即在初始化之前不知道这些查询参数是什么。
我需要的是一种允许我的Ember应用程序最初查询服务器以获取它应该接受的参数列表的方法。在上面的链接中,文档使用参数' filteredArticles'对于计算属性。在相关函数中,他们对计算属性应该过滤的值进行了硬编码。尝试以某种方式扩展它是一个好主意,可以通过参数进行推广吗?我甚至可以动态添加查询参数吗?我希望在我用这个兔子洞陷入困境之前对这种方法的有效性进行评估。
答案 0 :(得分:3)
在生成用户更改的预览弹出窗口时,我遇到了类似的问题。预览的模型具有无法预先确定的动态属性集。我想出的解决方案是对一组数据进行base64编码,并将其用作查询参数。
您的网址会是这样的吗?filter = ICLkvaDlpb0iLAogICJtc2dfa3
查询参数绑定到一个双向计算,它接收一个base64字符串并输出一个json obj,
JSON.parse(atob(serializedPreview));
以及反向:接受json obj并输出base64字符串。
serializedPreview = btoa(JSON.stringify(filterParams));
您需要一些逻辑来防止空的json对象被序列化。在这种情况下,您应该将查询参数设置为null,并将其从您的网址中删除。
使用此模式,您可以在查询参数中存储您想要的任何内容,并且仍然可以将url作为可共享的。但是,缺点是你的url的查询参数被你的用户混淆了,但我想大多数用户并不真正手动读取/编辑查询参数。