多对多Ajax表单(Symfony2表单)

时间:2012-07-13 01:14:27

标签: symfony

我在玩家和锦标赛之间有mbitodb的多对多关系。

我希望能够立刻为锦标赛添加许多玩家。如果没有ajax,这是微不足道的,但是我们拥有数以千计的玩家,因此表单选择变得非常庞大。

我们想为此使用ajax。是否可以创建一个小部件(使用js)来正确处理这个问题?如果是这样,有关jquery插件(或其他)使用的任何提示?

如果没有,最新的标准策略是什么?我想我可以大量更改此表单的视图并使用ajax自动完成功能一次添加一个播放器,然后再使用一些代码来逐个删除每个播放器。但是,我真的很想拥有一个可以重复使用的小部件,因为它更干净,效率更高。

我整天都在玩Select2(类似于jQuery Chosen),我让它通过ajax添加很多玩家,但是当我最初加载时它不允许我设置已连接的玩家页面,所以我将无法看到谁已经参加比赛,并且必须重新输入所有人。

感谢您对此事的任何意见!我无法通过谷歌找到任何东西。

1 个答案:

答案 0 :(得分:5)

我能够通过$.ajax在onload函数中的构造函数之后完成此任务,其中//website/jsonItem是所有项的json编码列表,//website/jsonItemUser是json编码列表附加到用户的所有项目。我使用//来保持调用之间的https/http一致。

$(document).ready(function(){
  $('.selectitem').select2({
    minimumInputLength:0
    ,multiple: true
    ,ajax: {
      url: "//website/jsonItem"
      ,dataType: 'jsonp'
      ,data: function (term, page) {
        return {
          q: term, // search term
          limit: 20,
          page: page
        };
      }
      ,results: function (data, page) {
        var more = (page * 20) < data.total;
        return {
          results: data.objects, more: more
        };
      }
    }
    ,initSelection: function(element, callback){
      var items=new Array();
      $.ajax({
        url: "//website/jsonItemUser"
      });
      callback(items);
    }
  });
  $.ajax({
    url: "//website/jsonItemUser"
    ,dataType: 'jsonp'
    ,success: function(items, status, ob) {
      $('.selectitem').select2('data',items);
    }
  });
});