私のアプリケーションにルートと対応するテンプレートがあります。ページの読み込み自体で、URLパラメータに基づいて要素を隠すことはしません。私はjQuery $.("elementName").hide();
とそれ以外の組み合わせを使用してafterModelメソッドでこれを実行しようとしました。しかし、DOMはまだ利用できないと思われるので、何も機能しません。アクションセクションのボタンアクションと同じことが達成できますが、ページロード時にそれをやってみたいと思っています。誰かが私が間違っていることを指摘できますか?emberJSのHTML要素の属性をafterModelまたは類似のメソッドから変更する方法
答えて
これを行うための正しい方法は、燃えさしを使用することです
q: '',
colors: [],
hasSearch: Ember.computed.notEmpty('q'),
hasColors: Ember.computed.notEmpty('colors')
テンプレート/ index.hbsハンドルバー{{#if}}
ヘルパー。あなたはqueryParams
そのかなり簡単と組み合わせる場合:
をお使いのコントローラは次のようになります。
export default Ember.Controller.extend({
queryParams: ['showSomething'],
});
そして、このようなあなたのテンプレート:
<h1>Hello</h1>
{{#if showSomething}}
<div id="something">something</div>
{{/if}}
あなたが本当にしたい場合に手動でDOMを操作するには、didInsertElement
フックでこれを行うことができます。あなたが唯一のコンポーネントでこのを持っているしかし:
のでmy-component.hbs
は次のようになります。
<div id="{{concat elementId "something"}}>something</div>
とあなたのmy-component.js
export default Ember.Component.extend({
didInsertElement() {
this._super();
if(false) {
$(`#${this.get('elementId')}something`).hide();
}
}
});
をしかし、私は強く反対をお勧めします!
this._super()の目的は何ですか?なぜこのアプローチに対してお勧めしますか? didTransitionとafterRenderを使用して、ルート自体でこれを解決しました。私は以下のリンクを参照しました:https://discuss.emberjs.com/t/is-there-an-event-after-the-template-has-been-added-to-the-outlet/8737。もう1つのことは、今のところ私のアプリにコントローラがないということです。私はそれを追加することができると思うが、それが必要かどうか分からない。私は明日あなたのアプローチを試すのを待っている。 – Rahul
チェックアウト[このリンク](https://guides.emberjs.com/v2.11.0/object-model/classes-and-instances/#toc_overriding-parent-class-methods) 「これ。_super() 'は上書きされたメソッドを呼び出しています。そして私は最初のアプローチを推奨しています。なぜなら、それを行うための唯一の邪悪な方法だからです。これを手動で行う場合、基本的にフレームワークに対して作業します。また、ルートでこれを行うことは、私が考えている動作はサポートされていません.Emberはいつでもコンポーネントを再レンダリングすることができます。また、ハンドルバーを使用すると、実際にノードがDOMから削除されるため、パフォーマンスが向上します。なぜこの方法を使わないのでしょうか? – Lux
URLパラメータqueryParamsはルートにありますか?そうであれば、コントローラのプロパティを設定して、それらの存在(または他の真実の条件)をチェックし、DOM表示のためにテンプレート内のプロパティを利用することができます。これらの値を子コンポーネントに送ることさえできます。
ルート/ index.js
queryParams: {
q: {
refreshModel: true
},
colors: {
refreshModel: true
}
}
コントローラ/ index.js
{{#if hasSearch}}
<p>You are searching for {{q}}</p>
{{/if}}
// .. etc for colors
- 1. Railsはlink_toのhtml要素属性を変更します
- 2. Mateial-UIライブラリの要素のHTML属性を変更する
- 3. 要素の名前属性のCSSを変更する方法
- 4. Angular 2の要素の属性を変更する方法
- 5. JavaScriptでHTMLオブジェクト要素のデータ属性値を変更する方法
- 6. すべてのタグのHTML要素の属性を変更しますか?
- 7. 内部のカスタム要素内から属性を変更する
- 8. Emberjs - クリックした要素の属性を取得
- 9. OpenIRの類似ノードから属性を抽出する
- 10. 要素内のxslt属性の変更
- 11. このhtml要素の属性へのアクセス方法は?
- 12. 子要素からの親の属性をブロックする方法
- 13. htmlウェブページのlabel要素から "for"属性を抽出する
- 14. xml要素から属性の値を取得する方法
- 15. 複製されたsvg要素の属性を変更する
- 16. 複製された要素の属性を変更する
- 17. Rubyを使ってWatirで類似のHTML要素を見つける方法
- 18. モデルから属性の変更を検出する方法は?
- 19. 要素のdata-urlまたは同様の属性を変更する
- 20. html要素の "value"属性の値を変更するjQuery関数
- 21. HTMLタグの属性属性をSublime Textと似ています
- 22. 類似::前と::後の擬似要素
- 23. PHP - 類似性のための配列要素を比較し、最も類似ペアは最初
- 24. JavaScript要素を含むHTML要素のinnerHTMLの一部のCSS属性を変更します。
- 25. jQueryを使用してHTML要素の値属性とクラスを変更する方法は?
- 26. 要素のスクロール(スティッキー要素)を行ったときに要素の属性を変更するには
- 27. htmlのid属性を変更する方法
- 28. 属性セレクタを使用して子要素のCSSを変更する方法
- 29. JavaScriptによるHTMLカスタム属性値の変更方法は?
- 30. AngularJSのHTML要素(ディレクティブ)の属性名をプログラムで計算する方法は?
おそらく 'didInsertElement'を使用できます。しかしそれはEmberのようなものではありません。代わりに、デフォルトで要素を非表示にして、必要に応じて要素をオンにしてみてください。 –
@ torazaburoそれは私がやったことであり、それは働いた。私はフックdidTransitionと 'アフターレンダリング'を使用しなければなりませんでした。しかし、理想的な方法は、以下に述べるようにヘルパーを使うことです。私は朝にそれを試してみて、効果があるかどうかを教えてくれるでしょう。 – Rahul
あなたはあなたのルートの中で "didTransition"イベントを使うことができると思います –