Javascript-форум (https://javascript.ru/forum/)
-   Dojo toolkit (https://javascript.ru/forum/dojotoolkit/)
-   -   Не срабатывает событие 2 (https://javascript.ru/forum/dojotoolkit/62719-ne-srabatyvaet-sobytie-2-a.html)

koha345 25.04.2016 19:57

Не срабатывает событие 2
 
Почему-то при нажатии на div с id = "cp" сообщение выводится, а при id = "btn" - нет. Почему? Как повесить событие на кнопку, созданную из div?

Код:

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title></title>

    <style type="text/css">
        html, body {
            width: 100%;
            height: 100%;
            margin: 0;
            overflow:hidden;
        }

        #borderContainer {
            width: 50%;
            height: 50%;
        }

        #bContainer {
            width: 50%;
            height: 50%;
        }
    </style>

    <link rel="stylesheet" href="resources/dijit/themes/claro/claro.css">

    <script>dojoConfig = {parseOnLoad: true}</script>
    <script src='resources/dojo/dojo.js'></script>

    <script>
        require(["dojo/parser"]);
        require(["dijit/layout/BorderContainer"]);
        require(["dijit/layout/ContentPane"]);
        require(["dijit/TitlePane"]);
        require(["dijit/MenuBar"]);
        require(["dijit/PopupMenuBarItem"]);
        require(["dijit/DropDownMenu"]);
        require(["dijit/MenuItem"]);
        require(["dijit/layout/TabContainer"]);
        require(["dijit/form/Form", "dijit/form/Button", "dijit/form/ValidationTextBox", "dijit/form/DateTextBox"]);
    </script>

    <script>
        require([
            "dojo/query",
            "dojo/domReady!"
        ], function(query){
            query("#cp").onclick(
                    function(){
                        alert("cp");
                    }
            )
        });
    </script>

    <script>
        require([
            "dojo/query",
            "dojo/domReady!"
        ], function(query){
            query("#btn").onclick(
                    function(){
                        alert("btn");
                    }
            )
        });
    </script>


</head>
<body class="claro">
<div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'sidebar', gutters:true, liveSplitters:true" id="borderContainer">
    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="splitter:true, region:'leading'" style="width: 20%;">
        <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Пусто', open: false">
            <!-- Здесь ничего нет! -->
        </div>
    </div>
    <div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="region: 'center', style: {height:'100%'}">
        <div id="cp" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="splitter:true, region:'top'">
            <div data-dojo-type="dijit/MenuBar">
                <div data-dojo-type="dijit/PopupMenuBarItem">
                    <span>Меню</span>
                    <div data-dojo-type="dijit/DropDownMenu">
                        <div id="btn" data-dojo-type="dijit/MenuItem">Текст1</div>
                        <div data-dojo-type="dijit/MenuItem">Текст2</div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>


destus 26.04.2016 16:34

Надо либо в разные модули это вынести, обьявить через define и подключать как зависимости в одном require на главной странице, либо просто под один require все засунуть. Если первый вариант, то настройка dojoConfig должна быть.

koha345 28.04.2016 18:01

Цитата:

Сообщение от destus (Сообщение 415057)
Надо либо в разные модули это вынести, обьявить через define и подключать как зависимости в одном require на главной странице, либо просто под один require все засунуть. Если первый вариант, то настройка dojoConfig должна быть.

А если я просто повешу в html следующий фрагмент:
Код:

<script type="dojo/on" data-dojo-event="click">
        sayHello("Name");
    </script>

, то можно будет как-то объявить функцию sayHello в dojo, чтобы из разных мест html цеплялось и передавались разные значения?
Меня изначально интересует объявление глобальной функции и её вызов.

destus 28.04.2016 18:27

О какой глобальности идет речь при использовании AMD подхода? Dojo определяет ровно две глобальные переменные: define и require. В вашем случае надо написать модуль, который возвращает вызов функции sayHello и подключать этот модуль в других модулях.


Часовой пояс GMT +3, время: 01:21.