1

クライアント チャネル コード (phoenix.js ファイル内) を調べると、ES6 が使用されていることがわかりました。サンプルコード:

let chan = socket.chan("rooms:123", {token: roomToken})
//     chan.on("new_msg", msg => console.log("Got message", msg) )
//     $input.onEnter( e => {
//       chan.push("new_msg", {body: e.target.val})
//           .receive("ok", (message) => console.log("created message", message) )
//           .receive("error", (reasons) => console.log("create failed", reasons) )
//           .after(10000, () => console.log("Networking issue. Still waiting...") )

this.onError( reason => {
      this.socket.log("channel", `error ${this.topic}`, reason)
      this.state = CHAN_STATES.errored
      this.rejoinTimer.setTimeout()
    })

つまり、IE と Safari ではネイティブに実行されません (少なくとも)。ある種のポリフィルを使用するべきではありませんか? 最良のアプローチ/ポリフィルは何ですか? また、ポリフィルはクラス/let/...をカバーしますが、アロー関数/新しい文字列補間はカバーしないという印象を受けています。自分で変更する必要がありますか?

4

1 に答える 1

3

ES6 は言語に新しい構文を追加するため、アロー関数をポリフィルする方法はありません。

ただし、新しいアプリケーションを作成するとき、Phoenix はアセットを結合するために使用されるBrunchというライブラリをインストールします。これには、 ES6 をブラウザーで実行される JavaScript にトランスパイルするBabelのラッパーが含まれています。

priv/static/app.js(ソース) の代わりに (コンパイルされた出力)を見るweb/static/app.jsと、新しい ES6 構文がないことがわかります。

特定の関数を使用する場合に見つかる可能性のあることの 1 つは、 https://babeljs.io/docs/advanced/caveats/babel-polyfill.jsで読むことができるものを含める必要がある場合があります。

これは Phoenix 0.10.0 で導入されました。詳細については、発表の投稿http://www.phoenixframework.org/v0.14.0/blog/phoenix-0100-released-with-assets-handling-generatを参照してください。

于 2015-07-21T10:47:11.333 に答える