La opción Tag-it onlyAvalaibleTags no funciona

Utilizo el complemento tag-it de https://github.com/aehlke/tag-it/downloads . ¿Cómo deshabilitar la adición de nuevas tags?

$(document).ready(function () { $("#Tags").tagit({ singleField: true, singleFieldNode: $('#mySingleField'), // onlyAvailableTags : true, allowNewTags: false, tagSource: [@Html.Raw(ViewBag.AvailableTags)] }); }); 

Intenté usar onlyAvailableTags : true y allowNewTags: false , pero no tiene efecto.

Como dice “pero no tiene efecto”, supongo que @Html.Raw(ViewBag.AvailableTags) produce una salida que rompe la syntax de javascript. Las tags deben estar entre comillas, de lo contrario se tratan como variables.

Salida incorrrecta:

 tagSource: [my-tag, another-tag] 

Del lado del servidor, asumo que tienes algún tipo de IEnumerable :

 ViewBag.AvailableTags = new List { "my-tag", "another-tag", }; 

Luego, en tu .cshtml :

 tagSource: ["@string.Join("\", \"", ViewBag.AvailableTags)"] 

Esto produciría la salida correcta:

 tagSource: ["my-tag", "another-tag"] 

Eso sería lo que yo intentaría primero.

Lo encontré al comentar:

  // Autocomplete will create its own tag from a selection and close automatically. if (!that.tagInput.data('autocomplete-open')) { that.createTag(that._cleanedInput()); } 

Y:

 // Create a tag when the element loses focus. // If autocomplete is enabled and suggestion was clicked, don't add it. if (!that.tagInput.data('autocomplete-open')) { that.createTag(that._cleanedInput()); } 

Se elimina esta funcionalidad. Quizás no sea la forma más limpia de hacerlo, pero funciona.

Simplemente comente los bucles if(){ } .

Esto es lo que hice para la última versión de tag-it:

 var tags_list = ['tag1', 'tag2, 'tag3]; $("input[name='subject-tags']").tagit({ availableTags : tags_list, beforeTagAdded : function(event, ui) { if(tags_list.indexOf(ui.tagLabel) == -1){ return false; } } }); 

Intenté hacerlo más limpio implementando

 $("input[name='subject-tags']").tagit({ availableTags : ['tag1', 'tag2, 'tag3], beforeTagAdded : function(event, ui) { if(this.availableTags.indexOf(ui.tagLabel) == -1){ return false; } } }); 

Pero this.availableTags no devuelve la matriz (return: undefined ). Soy un noob de JS, así que algo debe estar mal con la forma en que accedo a la propiedad.