2012-07-13 6 views
3

J'ai une relation many-to-many en mongodb entre les joueurs et les tournois.Formulaires Ajax plusieurs-à-plusieurs (Formulaires Symfony2)

Je veux être capable d'ajouter plusieurs joueurs à un tournoi en même temps. C'est trivial à faire sans ajax, mais nous avons une base de données de milliers de joueurs, et le formulaire select devient énorme.

Nous voulons utiliser ajax pour cela. Est-il possible de créer un seul widget (avec js) pour gérer cela correctement? Si oui, des conseils sur ce que jquery plugin (ou autre) à utiliser?

Sinon, quelle est la stratégie standard pour le faire? Je suppose que je pourrais changer radicalement la vue pour ce formulaire et utiliser une saisie semi-automatique ajax pour ajouter un joueur à la fois, et puis plus de code pour supprimer chaque joueur un à la fois. Cependant, j'aimerais vraiment avoir un seul widget que je puisse réutiliser car il est tellement plus propre et semble beaucoup plus efficace. J'ai joué avec Select2 toute la journée (similaire à jQuery Chosen) et je l'ai travaillé pour ajouter de nombreux joueurs via ajax, mais il ne me permet pas de définir les lecteurs déjà attachés lorsque je charge la page initialement, donc Je ne serai pas en mesure de voir qui est déjà dans le tournoi et devra retaper tout le monde.

Merci pour toute contribution à ce sujet! Je ne trouve rien via Google.

Répondre

5

I a été en mesure d'accomplir ceci par $.ajax après le constructeur dans la fonction OnLoad où //website/jsonItem une liste codée json-de tous les articles, et //website/jsonItemUser une liste codée json-de tous les éléments fixés à l'utilisateur. J'ai utilisé // pour garder le https/http cohérente entre les appels.

$(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); 
    } 
    }); 
});