2016-07-06 1 views
0

J'essaie d'utiliser fancytree dans une page Durandal. Je l'ai déjà fait mais je n'arrive pas à faire fonctionner ça maintenant et ça me rend fou.erreur javascript "n'est pas une fonction ..." mais les bibliothèques sont chargées

J'ai un point d'arrêt de débogage js sur la ligne $("#tree").fancytree... et au point le code arrête, je les trois bibliothèques suivantes chargées:

jquery-1.12.1.js  
jquery-ui-1.11.4.js 
jquery.fancytree.js 

Et pourtant, il n'y a pas de méthode prototype « fancytree » indiquant, pour l'élément et je reçois system.js:109 TypeError: $(...).fancytree is not a function(…) sur la ligne d'initialisation. Dans le passé, cela a été causé par une bibliothèque jquery-ui manquante, mais clairement, c'est chargé ici.

Qu'est-ce que je manque s'il vous plaît?

Édité pour ajouter plus d'informations.

HTML est largement hors de propos car il a juste

<div id="tree"></div> 

Il y a un viewmodel attaché qui contient:

self.attached = function (vw, prt) { 
     buildTree(vw); 
    } 

et

function buildTree(view) { 
     // Initialize Fancytree 
     $("#tree").fancytree({ 
      checkbox: true, 
      selectMode: 2, 
      source: {url: "testdata/ajax-tree-taxonomy.json", debugDelay: 1000}, 
      toggleEffect: { effect: "drop", options: {direction: "left"}, duration: 400 }, 
      lazyLoad: function(event, data) { 
       data.result = {url: "testdata/ajax-sub2.json", debugDelay: 1000}; 
      } 
     }); 

    } 

Je mets mon point d'arrêt de débogage au $("#tree").fancytree({ ligne et alors il a chargé les bibliothèques mentionnées ci-dessus.

Éditer 2: Curieux et curieux ... J'ai fait plus de débogage. Je mets un point d'arrêt à l'intérieur de la librairie jquery.fancytree.js et l'exécution du code y arrive! De plus, il crée en fait la méthode element.fancytree nécessaire et reste longtemps attaché à l'élément pendant le débogage. Le problème est que quelque chose se produit ensuite dans l'initialisation jquery qui supprime la méthode .fancytree() de l'élément et avant que l'exécution du code ne sorte de la bibliothèque jquery!

J'ai une autre page de test html qui charge exactement les mêmes bibliothèques jquery, jquery-ui et jquery.fancytree et cela fonctionne très bien. Ca doit sûrement être quelque chose à voir avec Durandal alors?

+0

Pouvez-vous partager votre plein html ainsi ?? –

+0

Non, mais j'ai ajouté quelques parties pertinentes. – TheMook

+0

Quelle version de l'arbre fantaisie utilisez-vous? J'ai trouvé un exemple utilisant 2.10.2 qui fonctionne. https://jsfiddle.net/robertrozas/vnj4cpza/2/ – forgivenson

Répondre

1

Correction du problème! C'était quelque chose à voir avec requirejs rechargement jquery. J'ai trouvé la réponse à cette question: Make requireJs not reload jQuery if already on page

Je viens d'ajouter:

define('jquery', [], function() { 
    return jQuery; 
}); 

... après ma section require.js.config({...}); et avant la section define(['knockout', 'durandal/system', ... {.

ne peut pas croire qu'il était ce simple ...