Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
社内勉強会資料 PHPプロジェクトでのJavaScript
Search
shmurakami
April 28, 2014
Programming
0
640
社内勉強会資料 PHPプロジェクトでのJavaScript
社内勉強会でJSについて話した時の資料
jQueryについてのちょっろとした話と
JSの中にPHPのタグを入れざるを得ない時の対処法を考えてみた
shmurakami
April 28, 2014
Tweet
Share
More Decks by shmurakami
See All by shmurakami
レガシーなPHPの限界とレガシーからの脱却 / phpcon2019
shmurakami
2
3.4k
サーバーサイドから見るChatworkの現状と未来 / Now and future of Chatwork from server side perspective
shmurakami
3
1.2k
php grpc-client in phpcon2018
shmurakami
0
1.6k
lumen e2e test
shmurakami
0
1.1k
decoded_php.pdf
shmurakami
3
750
良心的にまじめに開発するための心構え
shmurakami
0
180
TypeScriptでKnockoutを書いてみた
shmurakami
3
1.2k
社内勉強会資料 JavaScriptの基本 その1
shmurakami
5
1.7k
Other Decks in Programming
See All in Programming
Amazon Qを使ってIaCを触ろう!
maruto
0
420
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
150
Better Code Design in PHP
afilina
PRO
0
130
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
250
Quine, Polyglot, 良いコード
qnighy
4
650
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
Tauriでネイティブアプリを作りたい
tsucchinoko
0
370
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
120
Macとオーディオ再生 2024/11/02
yusukeito
0
380
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.2k
Jakarta EE meets AI
ivargrimstad
0
630
RubyLSPのマルチバイト文字対応
notfounds
0
120
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5k
Code Reviewing Like a Champion
maltzj
520
39k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Become a Pro
speakerdeck
PRO
25
5k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
The Invisible Side of Design
smashingmag
298
50k
Producing Creativity
orderedlist
PRO
341
39k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Transcript
ࣾษڧձ͚ࢿྉ jQueryͱ͔ PHPϓϩδΣΫτͰͷJavaScriptʹ͍ͭͯͱ͔
Twitter: @sk_mrkm ࠷ۙgolang+AngularJS+TypeScriptͰ ͳΜ͔࡞Ζ͏ͱͯ͠·͢ 自己紹介 (公開時用)
今日話すこと ݸਓతʹϝϯς͕·ͩϚγʹͳΔjQuery ͷॻ͖ํ PHPͷϓϩδΣΫτͰJSΛॻ͘ͱ͖ʹΔ ͖͜ͱ
jQuery
jQuery使ってますよね
jQueryの導入 ࠓߋΔඞཁͳ͍Ͱ͢ΑͶ CPXFSͱ͔ͬͨΓదʹམͱ͖ͯͨ͠Β ͍͍ͱࢥ͍·͢
jQueryのオブジェクト jQueryΛಡΈࠐΉͱwindow.$ɹͱ window.jQuery͍ͬͯ͏ΦϒδΣΫτ͕ੜ ͞Ε·͢ ͍ͭ͜Βಉ͡ͷͰ͢ ($ === jQuery)
jQueryの使い方 $(‘’)ͰηϨΫλࢦఆͯ͠ॲཧॻ͚OK $(‘#hoge’).css(‘color’, ‘#ff0000’); $(‘.piyo’).hide(); $===jQueryͳͷͰ͜͏͍͏ॻ͖ํ jQuery(‘#hoge’).css(‘color’, ‘#ff0000’);
jQueryの使い方 jQueryͷॲཧେମ $(ducument).ready(function()); ͱ͔Ͱғ·Ε·͢ $(function(){})ͬͯͷͨ·ʹݟ·͢Ͷ
$(document).ready(...); $(function() {}); この2つの意味は同じです。 実行タイミングに違いがあると思ってたorz
$(document).ready() って?
ready(handler) Description: Specify a function to execute when the DOM
is fully loaded. DOMͷಡΈࠐΈ͕ྃͨ͠λΠϛϯάͰ handler͕࣮ߦ͞ΕΔ
ready(handler) Description: Specify a function to execute when the DOM
is fully loaded. DOMͷಡΈࠐΈ͕ྃͨ͠λΠϛϯάͰ handler͕࣮ߦ͞ΕΔ
$(document).ready(function(){}) $().ready(function() {}) この2つも同じ挙動になる。 (けれども下の方は非推奨の模様)
K2VFSZͷ෦ͰԿ͕ߦΘΕͯ ͍Δ͔͍ͬͯ·͔͢ʁ
$(‘#hoge’).show(); $(‘#hoge’).hide(); ͬͨ͜ͱ͕͋Δͱࢥ͍·͢ɻ ͍ͭ͜ΒԿΛͯ͠ΔͰ͠ΐ͏ʁ
$(‘#hoge’).show(); ! $(‘#hoge’).css(‘display’, ‘block’) $(‘#hoge’).hide(); ! $(‘#hoge’).css(‘display’, ‘none’) styleΛॻ͖͑ͯදࣔඇදࣔΛͯ͠Δ ͚ͩɻDOM͔Βফ͑ΔΘ͚Ͱͳ
͍ɻ
jQuery͕ԿΛͯ͘͠Ε͍ͯΔ͔ ͓͖ͬͯ·͠ΐ͏
jQueryの所感とか評判 ϑΝΠϧαΠζ͕Ͱ͔͍(minifyͰ100KB) HTML͕ԚΕΔ (IDͱ͔classͱ͔͍ͬͺ͍) େମϝϯςͰ͖ͳ͘ͳͬͯٽ͘ ຊମͷιʔεқߴ͍
一方で AngularJSͷதʹjQueryͷܰྔ൛͕͍Δ BackbonejQuery͕ඞཁ KnockoutjQueryΛར༻͢Δͷ͕Ұൠత ͡Όͳ͍͔ͱࢥ͏(ݸਓͷײͰ͢)
ѱධ͋Δ͚ͲjQuery͏ΑͶ
ଟϝϯς͕·ͩϚγ ͳॻ͖ํΛߟ͑ͯΈͨ
メンテがしんどい理由 JSͷ࣮ߦϧʔϧ͕͔Βͳ͍ ॲཧ͕σβΠϯʹґଘ͗͢͠ ԿΛͲ͏͍ͨ͠ͷ͔Θ͔Βͳ͍هड़͕ଟ͍
方針 Ͱ͖Δ͚ͩࡉ͔͍୯ҐͰؔԽ͔ͯ͠Γ͍͢ ໊લΛ͚ͭΔ ηϨΫλΛͨͬͱΘͳ͍Ͱมʹ͔ͯ͠Γ ໊͍͢લ(ry parentͱ͔childͱ͔ґଘ͕ߋʹ૿͔ͯ͠Γͮ Β্͍ʹॏ͍ͷͰͳΔ͘Θͳ͍ (ͦͦfindͬͨ΄͏͕͍)
(function(App){ var Edit = (function(){ return { isText: function(type){return type
=== Hoge.TypeText; }, isImage: function(type) {return type === Hoge.TypeImage; }, toggleImage: function($selector, $imageRow) { if (this.isText($selector.val())) {$imageRow.hide();} else {$imageRow.show();} }};! })(); ! App.nEdit = Edit; })(App); $(document).ready(function(){ ! var $checkedType = $('.typeSelector:checked'); ! var $imageRow = $('.questionImageRow'); ! $('.typeSelector').change(function(){ ! ! App.Edit.toggleQuestionImage($(this), $imageRow); ! }); ! App.Edit.toggleQuestionImage($checkedType, $imageRow); });
݁ہϝϯς͠ΜͲ͍ɻ ϑϨʔϜϫʔΫΛ͍·͠ΐ͏
フレームワーク νʔϜͰ͏ʹ͖ͪͬͱϧʔϧΛܾΊͳ͍ͱίʔυ͕ࢄΒ͔Δ ػೳগͳ͍͚ͲϑΝΠϧαΠζখ͍͍͍͢͞͠ɻখ ͍͞نͩͱඞཁेͳײ͡ ϞόΠϧͩͱͪΐͬͱॲཧ͕ॏ͍ؾ͕͢Δ େن͚ɻͳΜͱͳ͘ආ͚ͯΔ
PHPͰੜ͢ΔϖʔδͰ JSΛॻ͘ͱ͖ʹࢥ͏͜ͱ
PHPʹݶΒͣαʔόଆͰ HTMLΛੜ͢Δ໘Ͱ ى͜Γ͏Δ
PHPでJSを書く <?php $hoge = true; ?> <script> var hoge; if
(‘<?php echo $hoge ?>’) { hoge = ‘hoge’; } else { hoge = ‘fuga’; } console.log(hoge); // hoge </script>
ؾ࣋ͪѱ͍
やるべきじゃない理由 JS͕PHPʹґଘ͍ͯ͠Δ ςετ͕ॻ͚ͳ͍ ݟ௨͕͠ѱ͍ ͖ͪΘΔ(ry
ରॲ๏ʁ
対処法 αʔόαΠυͷॲཧΛAPIԽͯ͠AjaxͰ JSONΛड͚औΔ PHPΛೖΕ͟ΔΛಘͳ͍ॴΛ·ͱΊΔ
JSONを受け取る αʔόαΠυͰϨϯμϦϯάجຊ͠ͳ͍ ͰJSONΛు͔ͤΔ ରॲ๏ͱ͍͏͔Ή͠Ζ͜Ε͕ݱͷ࡞Γํ ͡Όͳ͍͔ͳ͊ͱࢥ͏ αʔϏεͷ࡞ΓํΛࠜຊ͔Βม͑Δඞཁ͕ ͋ΔͷͰίετେ
PHPが絡む場所をまとめる PHPͱJSΛ͢Δ ͱΓ͋͑ͣͷରॲ๏͚ͩͲΒͳ͍ΑΓ ͣͬͱϚγ ͦΜͳʹ͍͜͠ͱͰͳ͍ͷͰΓ͍ͨ
コード var App = App || {}; (function(App){ // ςετͰ͖ͳ͍͔͠ΓͮΒ͍
if ('<?php echo $hoge; ?>') ... else ... App.Bridge = { hoge: '<?php echo $hoge ?>', fuga: '<?php echo $fuga ?>' }; if (App.Bridge.hoge) ... else ... })(App);
// Bridge໊ͬͯલదͳͷ͔͔ΒΜ // PHPͷهड़͕ඞཁͳͷΛ୯ҰͷΦϒδΣΫτʹ͍Δ App.Bridge = { hoge: '<?php echo
$hoge ?>', fuga: '<?php echo $fuga ?>' };
Կ͕خ͍͠ͷʁ
<script> // PHP͕ඞཁͳͱ͜ΖHTMLʹهड़͢Δ App.Bridge = { hoge: '<?php echo $hoge
?>' }; </script> <script src=”app.js”></script> (function() { // PHPͱͰ͖Δ if (App.Bridge.hoge) { // doSomething } })() HTML app.js
<script> // ͦΕͧΕgetterͱ͔ஔ͍͓͚ͯ ɹɹApp.Bridge.getHoge()ͰΛऔΕΔ // ͜ͷؔΛmockʹͯ͠ςετॻ͘ͱ͔Ͱ͖Δ App.Bridge = { getHoge:
function() { return ‘<?php echo $hoge ?>’; } }; </script>
var App = App || {}; (function(App){ // ςετͰ͖ͳ͍͔͠ΓͮΒ͍ if
('<?php echo $hoge; ?>') // doSomething else // doSomething App.Bridge = { hoge: '<?php echo $hoge ?>', fuga: '<?php echo $fuga ?>' }; if (App.Bridge.hoge) // doSomething else // doSomething })(App);
+4ͷதʹαʔόଆͷίʔυ ͕ೖͬͯΔͱ ςετ͕ॻ͚ͳ͍ ϑϩϯτΤϯυ / όοΫΤϯυ͕ᐆດʹͳ ͬͯอकੑ͕ѱ͍ ͳͲσϝϦοτͩΒ͚
まとめ jQueryͷ෦ͰԿΛͬͯΔ͔ͬͱ͘ jQueryΛ͏ͳΒɺͤΊͯϝϯς͍͢͠ॻ ͖ํΛ৺͕͚Δ JSϑϨʔϜϫʔΫ͍͍ͨσεω PHPͱJSΛͬͪ͝Όʹͯ͠ॻ͘ͱྑ͍͜ͱ͕ ແ͍ͷͰͤ͞Δ