엠버 응용 프로그램에 경로 및 해당 템플릿이 있습니다. 페이지를로드 할 때 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. 한 가지 더는 지금 내 앱에 컨트롤러가 없다는 것입니다. 나는 그것을 추가 할 수 있었다고 생각하지만 그것이 필요한지 확실하지 않다. 나는 내일 당신의 접근 방식을 시험해보기를 기다리고있다. – Rahul
Checkout [이 링크] (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
아마도'didInsertElement'를 사용할 수 있습니다. 하지만 그건 엠버 같은 것이 아닙니다. 대신, 기본적으로 요소를 숨기고 필요에 따라 요소를 켜는 것이 어떻습니까? –
@ 토라자부로는 내가했던 것과 그것이 효과가있다. 후크 didTransition과 'After-render'를 사용해야했습니다. 그러나 이상적인 방법은 아래에서 언급 한 것처럼 도우미를 사용하는 것이고, 나는 아침에 그것을 시험해보고 효과가 있는지 알려 줄 것입니다. – Rahul
경로 내에서 "didTransition"이벤트를 사용할 수 있습니다. –