2016-07-11 20 views
0

ich ein Stück Code, der Informationen aus dem Back-End, wenn meine Seite geladenBootstrap typeahead mit zwei Bluthund Datenquelle

//Bloodhound - Fetches all Project numbers for the current user 
     var prsysList = new Bloodhound({ 
      datumTokenizer: Bloodhound.tokenizers.whitespace, 
      queryTokenizer: Bloodhound.tokenizers.whitespace, 
      prefetch: { 
       url: "../Helper/LookUpProjectNumber/", 
       cache: false 
      } 
     }); 


     //Typeahead on project numbers 
     $('.typeahead').typeahead({ 
      hint: true, 
      highlight: true, 
      minLength: 1 
     }, 
      { 
       name: 'prsys', 
       source: prsysList 
      }); 

Jetzt holt, wenn der Benutzer einen Wert auswählt, möchte ich auf seine vorherigen Auswahl basiert schränken seine zukünftigen Entscheidungen ein. Um dies zu tun, habe ich eine anderen Bluthund, die mir eine Update Liste der Informationen liefert

//Bloodhound - Fetches all Project numbers for the current user 
      var newPrsysList = new Bloodhound({ 
       datumTokenizer: Bloodhound.tokenizers.whitespace, 
       queryTokenizer: Bloodhound.tokenizers.whitespace, 
       prefetch: { 
        url: '../Helper/GetCommonPrsys?prsys=' + encodeURIComponent($selectedPrsys), 
        cache: false 
       } 
      }); 


      //Init the new variable 
      newPrsysList.initialize(); 

      //Rebind all Typeaheads on project numbers 
      $('.typeahead').typeahead({ 
       hint: true, 
       higlight: true, 
       minlength: 1 
      }, 
       { 
        name: 'prsys', 
        source: newPrsysList 
       }); 

Mein Problem ist, dass trotz der Tatsache, dass mein zweiter Bluthund hat eine aktualisierte Version der verfügbare Daten für den Benutzer zu wählen, die Liste wird nicht aktualisiert.

Mache ich hier etwas falsch?

Beste

Antwort

0

Meine ursprüngliche Idee war, einfach einen zweiten Bluthund Variable zu erstellen und meine typeahead füttern mit ihm, in der Hoffnung, dass die Quelle automatisch aktualisiert werden würde (wie in der Frage oben erläuterte). Es stellt sich heraus, dass dies nicht der Fall ist und meine Daten für die Typeheads nicht aktualisiert wurden.

Um es funktionieren zu lassen, musste ich eine separate Ajax-Abfrage durchführen, die Ergebnisse in einer jQuery-Variable speichern, einen Bluthund (mit local) mit der jQuery-Variable erstellen und schließlich meine typeaheads füttern.

$.ajax({ 
       url: "../Helper/FunctionName", 
       data: ({ variable1: $var1 }), 
       type: "GET", 
       success: function (data) { 

        //Destroy all typeaheads 
        $('.typeahead').typeahead('destroy'); 

        var newData= new Bloodhound({ 
         datumTokenizer: Bloodhound.tokenizers.whitespace, 
         queryTokenizer: Bloodhound.tokenizers.whitespace, 
         local: data 
        }); 


        //Init the new variable 
        newData.initialize(); 

        //Rebind all Typeaheads on project numbers 
        $('.typeahead').typeahead({ 
         hint: true, 
         higlight: true, 
         minlength: 1 
        }, 
         { 
          name: 'data', 
          source: newData 
         }); 


        return false; 
       }, 
       error: function (data) { 
        //Destroy all typeaheads 
        $('.typeahead').typeahead('destroy'); 
        return false; 
       } 
      }); 

IMO dies sollte ein paar Minuten gedauert zu implementieren, aber ich denke, entweder ich habe nicht eine einfachere Lösung oder die Verantwortlichen von typeaheads fanden die Datenquelle Update nicht implementieren.

Viel Glück