Angular ui-select2 with AJAX multiselect - 检索最终选择值作为 id 而不是 json
问题陈述
我想使用 tokeninput/selected/select2 样式的 ui 控件来编辑模型中的 id 数组。 该 id 数组是我正在为其构建编辑器/表单的较大模型中一个属性的值。 编辑 id 数组后,当我将模型提交到服务器时,我希望该属性作为 id 数组提交,而不是作为 json 对象数组提交。
当使用 angular 的 ui-select2 组件时,我的属性的内容被替换为 json 对象数组。 目前尚不清楚编辑完成后如何撤消该操作。 我以为我可能使用了错误的组件,但是在使用 angular 做这种事情时,所有线程似乎都指向使用 ui-select2。
解释
数据模型以 'myProp' 属性开头,该属性是一个 id 数组:
{"myProp":["4","6"]}
ui-select2 指令将这些 id 替换为 json 对象。 下面是加载 ui-select2 时模型的外观示例。(此播放器中的现场演示:http://plnkr.co/edit/vEf1VwnRHNYdB9AuR9zO(:
{"myProp":[{"id":"4","text":"Label for 4"},{"id":"6","text":"Label for 6"},{"id":7,"text":"Seventh","color":"blue"}]}
保存模型时,我希望此属性作为 id 数组提交到服务器,而不是 json 对象数组。 所以基本上我想将数组展平为仅 ids 而不是 json 对象。 select2 API 提供了一个 val 方法,该方法将返回此 id 数组。 我如何/应该在 angular 的 ui-select2 组件的上下文中使用它?
警告:我在页面上针对多个属性多次执行此操作,因此特定于该属性的硬编码修复将不起作用。 对于我使用 select2 编辑的任何属性,它必须是自动发生的事情
示例代码
(请参阅此 plunker 中的代码:http://plnkr.co/edit/vEf1VwnRHNYdB9AuR9zO(
在 select2 指令中,我尝试更改以下实例:
elm.select2('val',
自
elm.select2('data',
这有效,但只有在您添加或删除元素后。但是,通过添加
elm.trigger('change');
到 initSelect 部分,这会在加载时触发它,我认为这应该会给你你想要的行为。
这是一个笨蛋。