Je me sens comme si c'est vraiment simple et j'ai un moment "bois pour les arbres", mais ce moment a duré plus d'un jour maintenant, il est donc temps d'obtenir de l'aide ! J'ai googlé cela et lu beaucoup de réponses SO, mais encore une fois, j'ai du mal à appliquer les réponses que j'ai vu à mon problème exact, sans doute en raison de mes propres lacunes.Accepter la fonction comme variable de plugin jQuery et les paramètres de retour
Pour illustrer le problème, j'ai ce plugin exemple de jQuery (j'ai essayé de créer un violon pour cela, mais ne sais pas comment inclure un externe plug-in à la page 'dans un violon):
(function ($) {
$.fn.test = function (options) {
var settings = $.extend({
onItemClick: function() { },
itemArray: new Array(),
}, options);
for (i = 0; i < settings.itemArray.length; i++) {
var $item = $("<li></li>");
$item.html(settings.itemArray[i].itemLabel);
$item.click(function() {
settings.onItemClick.call(settings.itemArray[i]);
});
this.append($item);
}
return this;
};
}(jQuery));
Comme vous pouvez le voir, j'accepte une fonction en tant que variable - onItemClick. J'ai omis le test que cela existe et est une fonction par souci de concision.
Ma page d'exemple ressemble à ceci:
<body>
<div>
<ul id="testList"></ul>
</div>
</body>
</html>
<script type="text/javascript">
$(function() {
var testDataArray = new Array();
var itemLabel = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"];
var itemDate = ["2017-01-03", "2015-08-03", "2016-06-21", "2016-12-20", "2013-09-07"];
for (i = 0; i < itemDate.length; i++) {
var testData = {};
testData["itemLabel"] = itemLabel[i];
testData["itemDate"] = itemDate[i];
testDataArray[i] = testData;
};
$("#testList").test({
itemArray: testDataArray,
onItemClick: function (item) {
alert(item.itemLabel + ": " + item.item.Date);
}
});
})
</script>
Alors, quand je l'appelle le plug-in de ma page, je veux être en mesure de passer une fonction en tant que paramètre et être en mesure d'inclure des variables dans cette fonction qui sera rempli avec des valeurs réelles par le plugin. Ce dernier point est où je suis coincé.
Le code que j'ai écrit ne fonctionne pas tel quel. Sans surprise, il jette l'erreur
Impossible de lire la propriété « itemDate » undefined
parce settings.itemArray ne sait pas dans le cadre de la fonction que j'essaie de joindre à l'événement de clic l'article. Je comprends cela, je ne comprends tout simplement pas comment le faire correctement!
créer [plunker] (https://plnkr.co) exemple – GProst