Knockout.js la saisie semi-automatique bindingHandler
Je tente ma main à un gestionnaire pour la saisie semi-automatique Knockout.js et je suis à la recherche de quelques commentaires. Actuellement, cela fonctionne, mais je vais essayer de voir si je peux faire le travail sans trop de Eval()dans tous les sens, et par souci de réutilisabilité, voir si il y a un moyen de faire référence à la ViewModel sans présupposer elle est nommée " vm " comme ci-dessous.
Utilisation:
<input placeholder="Test..." type="search" data-bind="autoComplete:$root.persons, source:'/api/Person/', parameterName:'searchString', labelKey:'displayName', valueKey:'urid', onSelected:'addPerson'" autocomplete="off" />
JS:
ko.bindingHandlers.autoComplete = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var postUrl = allBindingsAccessor().source; //url to post to is read here
var param = allBindingsAccessor().parameterName;
var labelKeyName = allBindingsAccessor().labelKey;
var valueKeyName = allBindingsAccessor().valueKey;
var selectedFunction = allBindingsAccessor().onSelected;
var selectedObservableArrayInViewModel = valueAccessor();
$(element).autocomplete({
minLength: 2,
autoFocus: true,
source: function (request, response) {
$.ajax({
url: param != null ? postUrl : postUrl + request.term,
data: param == null ? '' : param + "=" + request.term,
dataType: "json",
type: "GET",
success: function (data) {
response($.map
(data, function (obj) {
return {
label: eval("obj." + labelKeyName),
value: eval("obj." + valueKeyName)
};
}));
}
});
},
select: function (event, ui) {
if (selectedFunction != null) {
var functionCall = 'vm.' + selectedFunction + "(event, ui)";
eval(functionCall);
}
}
});
}
};
Vous savez que vous n'avez pas
eval()
d'accéder à une propriété, par son nom, ne obj[propertyName]
et vous l'avez...OriginalL'auteur Mike Thibault | 2013-04-07
Vous devez vous connecter pour publier un commentaire.
Pour un peu d'inspiration, je regarde Ryan Niemeyers réponse dans ce stackoverflow post, qui est la plus complète de la saisie semi-automatique de liaison gestionnaire que j'ai vu.
L'autre, mais beaucoup plus simple de saisie semi-automatique de liaison gestionnaire d'où mon équipe et moi avons créé pour nos propres fins peut être trouvé dans ce stackoverflow post
OriginalL'auteur Rune Vejen Petersen