2017-04-19 5 views
1

Ember2には、パラメータ{{my-component product=p}}を受け取るコンポーネントがあります。私は事前にコンポーネントをコンパイルし、生成されたhtmlを取得する必要があります。Ember 2のコンパイルコンポーネント

私はember-cli-htmlbars-inline-precompileを使用しようとしましたが、成功しませんでした。 let template = hbs"{{mycomponent product=p }};

+3

なぜこれをやりたいですか?あなたのユースケースについて説明できますか? Emberはプレレンダリング用にビルドされていません。しかし、おそらくfastbootはあなたが望むものです。 – Lux

+0

私はGoogleマップを使用しています。私は、美しい情報ボックスを表示するために、コンテンツ(HTML文字列)をinfoboxに渡す必要があります。私はそれのためのコンポーネントを作成し、今、そのコンポーネントをコンパイルし、htmlを生成し、infoboxのパラメータとして渡したいと思います。 –

+0

私は誤解するかもしれませんが、あなたは文字列(html)を持っていて、コンポーネントに入れたいと思いますか?そして '{{{mystring}}}'を使います。 3つのカール。 – ykaragol

答えて

0

まず、用語を明確にすることが重要です。 コンパイルコンポーネントはではありませんはHTMLを生成します。これは、基本的には、淡色のランタイムで生成および更新するために使用できるバイトコードを生成することを意味します。DOM Emberはを決して HTMLを生成します。これは理解するために重要です。

emberがHTMLを生成し、それをブラウザに渡して間違っていると思う場合は、

Emberは直接DOMを生成し、DOMノードを追跡してDOMを更新し、ライブバインディングを許可します。

したがって、基本的には、あなたが望むことを行うには、公開APIがあります。 もちろん、コンポーネントをレンダリングするだけで、this.element.outerHTMLを使ってHTMLにアクセスすることができます。しかし、それを覚えておいてくださいすべて生きているバインディングやアクションのようなemberの機能。

Googleマップはすべてをiframeにレンダリングするので、これは特に難しいことです。

ember-wormholeは、メインのdivの外にemberのコンテンツをレンダリングできることを示していますが、プライベートAPIを使用しています。この可能性はiframeで終わると思います。

+0

どのパブリックAPIですか? 'Ember.Handlebars.Compile( '{{コンポーネント}}'、{product:p})'と '

商品名

' –

+0

があります。唯一の方法はコンポーネントをレンダリングすることです'this.element.outerHTML'を使用してください。他のすべてはプライベートです。 – Lux

+0

しかし、私はコントローラ内の 'this.element.outerHTML'へのアクセス権を持っていません...私は別の解決策を考えなければなりません:/ –

関連する問題