javascriptとejsの変数の受け渡しについて
文字列以外は無理です。
後で具体的に何をするか解説します。
var board= "<%= board %>";
まずはこの辺を解説します。
JavaScriptというのはWebサーバーからHTMLファイルを受け取ったユーザーのブラウザが、
「おっ、スクリプトタグあるやんけ、実行したろ」と実行するものです。
ejsのこの書き方では文字列として出力しているので、
実際には下記のようなことになっています。
js
1> ({name: "taro"}).toString()
2"[object Object]"
オブジェクトやClassのインスタンスを無理やり文字列(String型)にキャストすると
"[object Object]"
という文字列になります。
つまりJS内のboard
変数は"[object Object]"
という文字列が格納され、
文字列はx
プロパティなんて持っていないのでundefinedになるというからくりです。
どうすれば解決するか
シリアライズしましょう。
JSON形式の文字列にして持ち込むのが基本です。
ejs
1<script type="text/javascript">
2 var board= JSON.parse("<%= JSON.stringify(board) %>");
3 alert(board);
4 alert(board.x);
5</script>
Classのインスタンスを直接JSON化するとそれなりに頑張ってくれますが、
メソッドが捨てられたりプロパティが抜け落ちたりするので
汎用オブジェクトに一度変換するなどしてください。
js
1> class hoge {
2 }
3> i = new hoge()
4> i.name = "taro"
5
6> JSON.stringify(i)
7"{"name":"taro"}" <- ちゃんと変換されはしてるのね
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/21 10:00
2020/01/21 10:36
2020/01/21 10:40