2013-03-26 4 views
12

In meinem HTML Ich habe diese Zeile:Element kann nicht in der Liste von ui-select2 erstellt wählen

<input ng-change="privChanged()" ng-model="selectedPriv" ui-select2="privsSelect2options"></input> 

und die privsSelect2options Funktion:

$scope.privsSelect2options = { 
    placeholder: "Wybierz privo", 
    allowClear:true, 
    minimumInputLength: function(){return 3;}, 
    formatInputTooShort: function (input, min) {return "Wprowadź conajmniej " + min + " znaki.";}, 
    formatSearching: function() { return "Wyszukiwanie..."; }, 
    formatNoMatches: function() { return "Nie znaleziono pasujących województw."; }, 
    query: function (query) { 
     query.callback({results: $filter('filter')($scope.privs,{name: query.term}) }); 
    }, 
    formatResult: function(priv){ 
     return priv.name; 
    }, 
    formatSelection: function(priv){ 
     return priv.name; 
    } 
}; 

Alles funktioniert OK, wenn ich 3 Buchstaben setzen Es filtert das Ergebnis und zeigt es korrekt an, aber ich kann kein Element anklicken und aus der Ergebnisliste auswählen. Kann mir jemand in dieser Angelegenheit helfen? Es kommt nicht einmal in die formatSelection Funktion.

+1

Können Sie 'privChanged()' Funktionsdefinition auf die Frage anhängen. – Stewie

+0

ja, ich habe es angehängt. Das Problem war sonst etwas. Ich poste in Antwort – biesczadka

Antwort

21

das Problem war, dass Priv Klasse/Tabelle hatte keine ID-Eigenschaft, und der Primärschlüssel war Feldcode. Ich hatte Funktion hinzuzufügen:

id : function(priv) { 
     return priv.code; 
    }, 

in $scope.privNameSelect2options

+2

Können Sie mir ein vollständiges Beispiel geben. Ich habe dieses Problem auch. – iroel

+0

Fügen Sie diese Funktion nur zu $ ​​scope.privNameSelect2options hinzu und geben Sie anstelle von 'code' einen Namen für ein Feld ein, das in Ihrer Entität ein Bezeichner ist. – biesczadka

1

Obwohl dies nicht wirklich in der select2 Dokumentation angegeben ist, werden Sie einen ID-Schlüssel mit einem Funktionswert Select2 übergeben müssen.

$scope.privsSelect2options = { 
    id: function(element) { return element.name; } 
    ... 
};