1

我在 Genemu 表单包中使用它

add('users', 'genemu_jqueryautocompleter_entity', array(
'route_name' => 'ajax_user',
'class' => Acme'\UserBundle\Entity\OldUser',
'multiple' => true,
'required' => false
))

https://github.com/genemu/GenemuFormBundle/blob/master/Resources/doc/jquery/autocomplete/entity_ajax.md

我可以多选用途,并且数据可以在里面输入。但即使我删除了整个文本框,我的值仍然保留在数据库中。看起来我无法删除它。他们输入正常,但没有更新。

如果我使用没有自动完成的普通多选,那么一切都很好

编辑:

我的意思是,就像我们在 SO 中提出问题并在输入时选择标签一样。然后我们可以通过删除文本来删除标签。在我的情况下,我可以在输入时添加用户,但删除字符不会删除用户。在隐藏的领域,他们还在那里

4

2 回答 2

0

您是否尝试将 放在orphanRemoval=true您的实体属性(用户)上以便删除它们?

更多关于orphalRemoval http://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html#orphan-removal

于 2012-09-13T15:03:43.523 回答
0

我相信这是genemuBundle的一个错误。我可以看到,如果您更改该值,该值将在实际输入中发生变化(来自 GEnemu Bundle 的 javascript 将其隐藏),但如果您删除输入中的值,则没有任何变化,因此旧值仍然存在.

当您提交表单时,旧值会被提交,因此您无法真正删除内容。

解决它的正确方法应该是改进 javascript,将真正隐藏输入的值设置为空白,genemuBundle 应该处理它,但是当我们等到它们纠正时,我们可以执行以下操作:

$("#autocompleter_name_input").change(function(){
    if($("#autocompleter_name_input").val()==""){
        $("#name_input").val("");
    }   
}); 

(虽然我没有尝试过,我正在做这个其他解决方法。这也是一个单一的,而不是你的情况,它是一个多选,因此使这有点复杂......)

作为一种解决方法,您可以在控制器中处理请求:

Genemu 还发送用户在输入中字面输入的内容。所以你应该在你的 $request->request->all() 中有类似的东西:

Array
(
   [your_entity_name] => Array
      ( all the fields, even with the old values)
   [autocompleter_your_entity_name] => Array
      ( what the user actually input)
)

只需使用它来为表单添加更多验证,并在控制器中对您的实体做任何您想做的事情。

很抱歉没有让它成为一个完整的答案,只是给出解决方法......

于 2014-06-11T08:34:48.220 回答