Toon posts:

[Dojo] ComboBox onChange QueryResult Vorige deelOverzicht

Pagina: 1
Acties:

Onderwerpen


Anoniem: 381305

Topicstarter
Hallo!

Op dit moment tracht ik met Dojo (DojoToolkit) een configuratie pagina te ontwikkelen, helaas gaat dit nog niet vlekkeloos :-)

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Test Config</title>
    <style type="text/css">
        @import "include/dojo/resources/dojo.css";
        @import "include/dijit/themes/claro/claro.css";
    </style>
    <link rel="stylesheet" href="include/form.css" type="text/css" />
    <script src="include/dojo/dojo.js" djConfig="parseOnLoad: true, isDebug: true"></script>
    <script type="text/javascript">
        dojo.require("dijit.dijit");
        dojo.require("dijit.layout.BorderContainer");
        dojo.require("dijit.layout.TabContainer");
        dojo.require("dijit.layout.ContentPane");
        dojo.require("dojox.data.QueryReadStore");
        dojo.require("dijit.form.ComboBox");
    </script>
</head>
<body class="claro">
    <div id="appLayout" class="camLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline'">
        <div class="centerPanel" data-dojo-type="dijit.layout.TabContainer" data-dojo-props="region: 'center', tabPosition: 'top'">
            <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title: 'Campaign Instances'">
                <h4>Campaign Instances Configuration</h4>
            </div>
            <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title: 'Campaign'">
                <h4>Campaign Configuration</h4>
            </div>
        </div>
    <div class="edgePanel" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'top'">
        <img src="images/logo.jpg">
    </div>
    <div id="leftCol" class="centerPanel" data-dojo-type="dijit.layout.TabContainer" data-dojo-props="region: 'left', splitter: true, tabPosition: 'top'">
        <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title: 'Menu'">

        <div dojoType="dojox.data.QueryReadStore" url="selectBusinessUnits.php" jsId="buStore"></div>
        <div dojoType="dijit.form.ComboBox" store="buStore" searchAttr="name"></div>
        
    </div>
</div>
</body>
</html>


Deze pagina geeft een ComboBox weer met hierin BusinessUnits die uit de database worden uitgelezen. Hiervoor wordt een PHP file aangeroepen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    
    header("Content-Type", "text/json");

    include_once("include/config.inc.php");
    $dbConnection = mysql_connect($dbHost, $dbUser, $dbPass);
    if (!$dbConnection) { die('Could not connect: ' . mysql_error()); }
    mysql_select_db($dbName, $dbConnection);
    $queryResult = mysql_query("SELECT * FROM businessunits");
    $arrResults = array();
    while($dbObject = mysql_fetch_object($queryResult)) {
        $arrResults[] = $dbObject;
   }
    print '/*'.json_encode(array('items'=>$arrResults)).'*/';
    mysql_close($dbConnection);
?>


Bovenstaande werkt prima! Helaas krijg ik het niet voor elkaar om _nadat_ een BusinessUnit is geselecteerd vanuit de ComboBox om hier de betreffende campagnes bij de laden. Dit zou dan met een PHP file weer opgehaald moeten worden uit de database. Deze camapgnes zouden dan onder "<div dojoType="dijit.form.ComboBox" store="buStore" searchAttr="name"></div>" moeten worden weergegeven.

Kan iemand mij een hint geven over hoe ik dat het makkelijkste zou kunnen doen?
Btw... ik had de vorige keer (veel) commentaar mbt de security, ik hoop dat dit nu ook beter is?

Alvast enorm bedankt!

Groet, Jeroen

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 31-05 22:20

MueR

Moderator Devschuur®

is niet lief

De vorige keer is je ook een voorbeeld gegeven van een ajax callback waarmee dit mogelijk is. Wat heb je geprobeerd om dit werkend te krijgen?

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!


Anoniem: 381305

Topicstarter
Hoi MueR,

jep dat klopt. Ik heb getracht het laatste voorbeeld van Maximizer te implementeren in de code in mijn eerste post. Waar ik echter niet uitkom... In het Dojo ComboBox gedeelte wordt een naam weergegeven, dit komt door de searchAttr. Echter heb ik het ID nodig wat ik dan mee kan sturen aan de Ajax functie.

File: Code extra in 1e file genoemd in post.
JavaScript:
1
2
3
4
5
6
7
function buSelection() { 

var buID = document.getElementById('buStore').value;  
var args = { url:"caGet.php?buid=" + buID, handleAs:"json", load:caGet, error:myErrorHandler }; 

dojo.xhrGet(args); 
}


caGet.php file:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    header("Content-Type", "text/json");
    include_once("include/config.inc.php");
    $buid = $_GET['buid'];
    $dbConnection = mysql_connect($dbHost, $dbUser, $dbPass);
    if (!$dbConnection) { die('Could not connect: ' . mysql_error()); }
    mysql_select_db($dbName, $dbConnection);
    $queryResult = mysql_query("SELECT * FROM campaigns where buid = \"$buid\"");
    $arrResults = array();
    while($dbObject = mysql_fetch_object($queryResult)) {
        $arrResults[] = $dbObject;
   }
    print '/*'.json_encode(array('items'=>$arrResults)).'*/';
    mysql_close($dbConnection);
?>


Heb je een tip om hoe ik dan dat ID kan meegeven uit de ComboBox selectie?

Thanks

Anoniem: 381305

Topicstarter
Hmm... Ik geloof dat ik het heb gevonden.

Door de volgende regels te gebruiken heb ik niet de naam maar het ID van de buStore weten te bemachtigen wanneer deze geselecteerd wordt.

JavaScript:
1
2
<div dojoType="dojo.data.ItemFileReadStore" jsId="buStore" url="selectBusinessUnits.php"></div>
<input dojoType="dijit.form.FilteringSelect" store="buStore" searchAttr="name" name="buSelect" id="buSelect" onChange="caGet">


JavaScript:
1
2
3
4
function caGet()
{
    var selectedID = dijit.byId('buSelect').get('value');
};


Gr. Jeroen


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee