Bonjour,
Je passe mes variables de fonctions par des tableaux et j'utilise jQuery.extend() pour merger les données passées et les valeurs par défaut que je souhaite donner.
Le soucis arrive lorsque j'ai des tableaux à plusieurs niveaux. Si je touche à une variable dans un tableau de 2e niveau, il remplace le tableau par celui passé en paramètre. Si je ne touche pas à des sous-tableaux alors ceux-ci sont bien conservés.
Un long discours vaut mieux qu'un petit dessin :) mais un exemple vous aidera à situer mon soucis :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="docs-assets/ico/favicon.png">
<title>popol</title>
</head>
<body>
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
function Init(options) {
var settings = $.extend({
v1: 'default',
v2: 'default',
v3: true,
v4: {
v4ss1: false,
v4ss2: 'lolo',
v4ss3: true
},
v5: {
v5ss1: true,
v5ss2: true
}
}, options);
console.log(settings);
}
jQuery(document).ready(function($) {
Init({
v1: 'element 1',
v4: {
v4ss1: true
}
});
});
</script>
</body>
</html>
Si vous regardez dans la console, vous verrez que v1, v2, v3 sont bien là. v5, v5ss1, v5ss2 aussi. Le soucis vient de v4, où j'ai modifié v4ss1 et il n'y a que lui dans le tableau... v4ss2 et v4ss3 ont disparus. En gros il a remplacé le tableau v4 par celui passé en paramètre au lieu de merger.
Merci de votre aide