2015-04-26 6 views
27

Im try out material-ui и react, и у меня возникает проблема с событиями, которые не срабатывают. Я установил react-tap-event-plugin, и я вызываю injectTapEventPlugin() при загрузке приложения.Реагируйте, нажмите события и материал-ui

toggleMenu никогда не вызывается в следующем фрагменте:

/** @jsx React.DOM */ 
var React = require('react'); 
var mui = require('material-ui'); 
var LeftNav = mui.LeftNav; 
var MenuItem = mui.MenuItem; 
var AppBar = mui.AppBar; 
var App = React.createClass({ 

    getInitialState: function() { 
    return { 
     message: 'Hello World!' 
    }; 
    }, 
    toggleMenu: function() { 
    console.log('clicked hamburger'); //<-- This is never fired 
    this.refs.menu.toggle(); 
    }, 

    render: function() { 
     var menuItems = [{ route: 'get-started', text: 'Get Started' }]; 
     return (
<div> 
    <AppBar onMenuIconButtonTouchTap = {this.toggleMenu} title = "Hej" /> 
    <LeftNav ref = "menu" docked = {false} menuItems = {menuItems} /> 
</div> 
     ); 
    } 

}); 

module.exports = App; 

Полный код примера можно проверить отсюда: https://github.com/oskbor/lunch-mirror

Днем за любые предложения относительно того, что Im делая неправильно!

ответ

16

Итак, я не смог определить, почему это причина, но я думаю, что проблема заключается в том, как вы разбиваете свою сборку на 2 отдельных файла.

Если я изменю свой GulpFile исключить строительство vendors.js и удалить строку

appBundler.external(options.development ? dependencies : []); 

он будет строить один JS файл со всеми зависимостями в нем, и все работает, как ожидалось.

Моя теория о том, почему:

При удалении зависимости от main.js пучка, основной пучок заканчивается в том числе только то, что ему необходимо, которая включает в себя только небольшие кусочки React, что кран-событие плагин потребности. react/lib/SyntheticUIEvent и т. Д. Таким образом, эти небольшие куски получают исправление, чтобы включить события touchTap.

Но в комплекте поставщиков у вас есть полный React, который вам нужен в вашем приложении. Это не исправлено, чтобы включать события touchTap, поэтому никакого события touchTap никогда не запускалось, потому что Реакт, который вы включили, неправильно обрабатывался.

 Смежные вопросы

  • Нет связанных вопросов^_^