WebHU - Programozási kérdések és válaszok

A Dojo 1.10 Widget nem konstruktor

A következő egyéni widgetem van, amelyet egy másik Core.js nevű Javascript fájlban szeretnék példányosítani.

Irányítópult-modul

define([
"dojo/_base/declare",
"dojo/_base/config",
"dojo/ready", 
"dojo/_base/window",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
], function(
   v_declare,
   v_config,
   v_ready,
   v_window,
   v_WidgetBase,
   v_TemplatedMixin,
) {
  return v_declare("dashboard", [v_WidgetBase, v_TemplatedMixin], {
    templateString: "<div>hello world</div>",
    constructor: function(setting) {
        console.log("smtg..");
    },
    buildRendering: function() {
        var v_context = this;
        var v_domNode = this.domNode;
        this.inherited(arguments);

        console.log('Expeerimental');
    },
    init: function() {
        console.log('Expeerimental');
    }
});
});

A Dashboard Widget példányosítása a Core.js-ben

require([
"dojo/_base/config",
"dojo/_base/declare",
"dojo/dom",
"dojo/dom-class",
"dojo/dom-style",
"dojo/on",
"dojo/topic",
"dojo/domReady!",
"ui/dashboard/dashboard"
], function(
    b_config,
    b_declare,
    b_dom,
    b_domClass,
    b_domStyle,
    b_on,
    b_topic,
    p_dashboard
 ) {

start();


function start(){
    console.log(p_dashboard);
    var dashboard = new p_dashboard();
};

});

A var dashboard = new p_dashboard(); sorban azonban a következő hibaüzenetet kapom:

TypeError: a p_dashboard nem konstruktor a HTMLDocument._461-ben (dojo.js:8) "in domReady callback" "TypeError: p_dashboard nem konstruktor

Nem értem, miért van ez a hiba. Kérlek világosíts fel valami ötlettel? Köszönöm

01.11.2017

Válaszok:


1

Szerintem a hiba a modul betöltési sorrendjében van,

A Core.js-ben a ui/dashboard/dashboard widget a Ready beépülő modul után lett betöltve, a visszahívási függvényben pedig közvetlenül a topic modul után hivatkoznak rá (tudván, hogy a dojo/domReady! nem hivatkozik a visszahívásban, mert az általános konvenció az, hogy nem rendelünk visszatérési változót a visszahívás funkcióban)

Tehát próbálja meg a ui/dashboard/dashboard-et a dojo/domReady! elé tenni, és a dojo megfelelően példányosítja azt, ha az elérési út jól be van állítva a dojo konfigurációban.

így kell lennie lent:

require([
    "dojo/_base/config",
    "dojo/_base/declare",
    "dojo/dom",
    "dojo/dom-class",
    "dojo/dom-style",
    "dojo/on",
    "dojo/topic",

    "ui/dashboard/dashboard",

    "dojo/domReady!"
], ..... 
);
01.11.2017
  • ez megoldja a problémádat? 03.11.2017

  • 2

    Meghívod a require-t 9 elemű tömbbel, és a függvényben csak a 8-at használod. Az utolsó (8.) elem a dojo/domReady!.

    require([
        "dojo/_base/config",     // 1 
        "dojo/_base/declare",    // 2
        "dojo/dom",              // 3
        "dojo/dom-class",        // 4
        "dojo/dom-style",        // 5
        "dojo/on",               // 6
        "dojo/topic",            // 7
        "dojo/domReady!",        // 8
        "ui/dashboard/dashboard" // 9
    ], function(
        b_config,                // 1. dojo/_base/config
        b_declare,               // 2. dojo/_base/declare
        b_dom,                   // 3. dojo/dom
        b_domClass,              // 4. dojo/dom-class
        b_domStyle,              // 5. dojo/dom-style
        b_on,                    // 6. dojo/on
        b_topic,                 // 7. dojo/topic
        /*********************************************************
                     Where is my dojo/domReady!??????
        *********************************************************/
        p_dashboard              // 8. ui/dashboard/dashboard
    ) {
        // ...
    });
    

    Csak annyit kell tennie, hogy a „dojo/domReady” elemet a require tömb végére helyezi:

    require([
        "dojo/_base/config",
        "dojo/_base/declare",
        "dojo/dom",
        "dojo/dom-class",
        "dojo/dom-style",
        "dojo/on",
        "dojo/topic",
        "ui/dashboard/dashboard",
        "dojo/domReady!"
    ], function(
        b_config,   // dojo/_base/config
        b_declare,  // dojo/_base/declare
        b_dom,      // dojo/dom
        b_domClass, // dojo/dom-class
        b_domStyle, // dojo/dom-style
        b_on,       // dojo/on
        b_topic,    // dojo/topic
        p_dashboard // ui/dashboard/dashboard
                    // dojo/domReady! is the self-called function
    ) {
        // ...
    });
    
    08.11.2017
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..