EmberはappendTo
を使用してルート要素内にそのビューを挿入します。しかし、emberインスタンスのdidCreateRootView
を無効にして、prependTo
を使用するように変更することができます。どのように見てくださいFastboot does this。
更新:didCreateRootView
を上書きするインスタンスイニシャライザです。
export function initialize(appInstance) {
appInstance.didCreateRootView = function(view) {
// overwrite didCreateRootView
};
}
export default {
name: 'prepend-to',
initialize
};
ember/glimmerはprependTo
メソッドを提供しない。あなたはappendTo
の実装に続いてそれ自身で実装する必要があります。
didCreateRootView
はプライベートフックです。時間の経過とともに安定していくとは思わないでください。
一般的には、目標を達成するための方法が他にある場合は、このパスに進まないことをおすすめします。希望の位置にエバー用の容器を追加することを検討してください。 HTMLマークアップを制御できない場合は、emberを初期化する前にjQueryを使用してコンテナを追加することができます。
アップデート2:
import jQuery from 'jquery';
export function initialize(appInstance) {
appInstance.didCreateRootView = function(view) {
let containerId = 'ember-container';
jQuery('<div>').prop('id', containerId).prependTo(jQuery(this.rootElement));
view.appendTo(`#${containerId}`);
};
}
export default {
name: 'prepend-to',
initialize
};
これはあなたが求めてきましたが、それは達成するためにはるかに簡単です正確に何ではありません。 のようなHTMLマークアップと、インスタンス初期化子の上のデフォルトのルート要素としてのボディが#existing-content
の前にもう1つのdiv #ember-container
を追加し、これを追加のルート要素として使用します。
アップデート3: あなたがここに燃えさし-ひねり見つける:https://ember-twiddle.com/43cfd1ae978b810f2e7cf445f9a3d40c?openFiles=instance-initializers.root-element.js%2C
あなたはDOMを調べる場合は、その燃えさしのルート要素が<div id="ember-container"></div>
で包まれているが表示されます。このラッパーはrootElement
に追加されます。したがって、既存のコンテンツの前には、rootElement
があります。私はember-twiddleにカスタムindex.html
を定義することはできないと思いますので、私はこれを実証することはできません。しかし、あなたは簡単に自分自身をテストすることができます。
このコードはどこに置く必要がありますか? – DeividKamui
@DeividKamuiは私の答えをより多くのサンプルコードで更新し、あなたに受け入れられるかもしれないもっと簡単なアプローチを書き留めました。 – jelhan
私はこれを試してみましょう。 – DeividKamui