Foundation の Reveal プラグインを使用して、Cycle.js アプリで素敵なモーダルを表示したいと考えています。
Webpack とその構成で何時間も遊んだ後、財団の js を自分の (es6) アプリに適切にインポートする方法を見つけました。
ただ、仮想DOMを扱っているので、Foundationのjsを初期化した時点では実際のhtmlは存在しません。
これが私のコンポーネントのコードです:
import Rx from 'rx';
import {div} from '@cycle/dom';
import $ from 'jquery';
import {foundation} from 'foundation-sites/js/foundation.core';
import 'foundation-sites/js/foundation.util.keyboard';
import 'foundation-sites/js/foundation.util.box';
import 'foundation-sites/js/foundation.util.triggers';
import 'foundation-sites/js/foundation.util.mediaQuery';
import 'foundation-sites/js/foundation.util.motion';
import 'foundation-sites/js/foundation.reveal';
require('./styles/configuration-modal.scss');
function ConfigurationModal(sources) {
const values$ = sources.props$;
const vtree$ = Rx.Observable.just(1).map(() => {
return div(
'#config-modal.reveal',
{attributes: {
'data-reveal': ''
}},
['hello']
);
});
return {
DOM: vtree$,
values$
};
}
$(function() {
$.fn.foundation = foundation;
$(document).foundation();
});
export default ConfigurationModal;
私のmain.js:
import Rx from 'rx';
import Cycle from '@cycle/core';
import {makeDOMDriver, div} from '@cycle/dom';
import ConfigurationModal from './components/ConfigurationModal/index';
require('./styles/index.scss');
function main(sources) {
const props$ = Rx.Observable.of({
pomodoroDuration: 25 * 60,
shortBreakDuration: 5 * 60,
longBreakDuration: 15 * 60
});
const configurationModal = ConfigurationModal({
DOM: sources.DOM,
props$
});
return {
DOM: configurationModal.DOM,
};
}
Cycle.run(main, {
DOM: makeDOMDriver('#app')
});
$(document).foundation()
これで、アプリが初期化された後にコンソールで実行すると、期待どおりに動作します。しかし、アプリ コードでは、dom は仮想であり、実際の html はまだ挿入されていないため、何も表示されません。
アプリが完全に初期化され、dom が実際に設定された後、どうすれば js コードを実行できますか?