2012-11-29 3 views
2

제 질문에서 말할 수 있듯이 EmderJS를 천천히 배우고 있습니다. 나는 루트에 대한 위대한 가이드를 읽었고 나는 세계를 취할 준비가되어 있다고 느꼈다.하지만 ..........경로를 사용하여 EmberJS에서 뷰 렌더링

예를 들어, {{somethingView}}가 렌더링 될 것이며 컨트롤러 속성 {{somethingCtrl }}. 이것이 올바른 행동입니까? 그렇다면 Ember.View에서 속성을 어떻게 렌더링할까요?

JS

window.App = Ember.Application.create({ 
    ready: function() { 
     this.initialize(); 
    } 
}); 


window.App.Router = Ember.Router.extend({ 
    root: Ember.Route.extend({ 
     index: Ember.Route.extend({ 
      route: '/', 
      connectOutlets: function(router) { 
       var controller = router.get('applicationController'); 
       controller.connectOutlet('garments'); 
      } 
     }) 
    }) 
}) 

window.App.ApplicationView = Ember.View.extend({ 
    templateName: 'application', 
}); 

window.App.ApplicationController = Ember.Controller.extend(); 


window.App.GarmentsController = Ember.Controller.extend({ 
    somethingCtrl: "Something in the controller" 
}); 

window.App.GarmentsView = Ember.View.extend({ 
    templateName: 'garments', 
    somethingView: "Something in the view" 
});​ 

한 DOM 물건

<script type="text/x-handlebars" data-template-name="application"> 
    <h1>Hi Ember</h1> 
    {{outlet}} 
</script> 
<script type="text/x-handlebars" data-template-name="garments"> 
    <h1>Garments</h1> 
    {{somethingView}}<br> 
    {{somethingCtrl}} 
</script> 

The Fiddle

답변

4

T 그의 행동은 정확합니다. 다음은 이러한 핵심 개념에 대한 나의 이해입니다.

  • 모델 :이 개체는 응용 프로그램에서 처리 한 날짜를 나타냅니다. 이는 응용 프로그램의 도메인 모델을 구성하는 비즈니스 개체입니다.
  • 컨트롤러 : 컨트롤러가 모델에 대한 액세스를 제공해야합니다. 컨트롤러에는 모델을 삽입해야하는 내용 (Ember.Controller에 대한 단일 Object 및 Ember.ArrayController에 대한 객체 배열)이 들어있는 속성 content가 있습니다. 컨트롤러는이 내용을보기로 전달합니다. 컨트롤러가보기의 기본 컨텍스트입니다. 따라서 설명하는 동작이 필요합니다.
  • 보기 :보기는 단지 문제를 표시하기위한 것입니다. 개인적으로 jQuery 애니메이션을 주로 사용합니다.

그럼에도 불구하고 템플릿의보기 인스턴스에 액세스 할 수 있습니다. 템플릿에서 'view'라는 이름으로 변수를 사용해야합니다. 나는 작업 예제로 바이올린을 업데이트 : http://jsfiddle.net/jPK8A/5/

<script type="text/x-handlebars" data-template-name="garments"> 
    <h1>Garments</h1> 
    {{view.somethingView}}<br> 
    {{somethingCtrl}} 
</script> 

그러나 명확하게하기 위해 : 가장 일반적인 경우는 컨트롤러에서 콘텐츠에 액세스 할 수 있어야합니다. 뷰의 변수에 액세스하는 경우는 드물지 않습니다. 앱에 날짜를 표시하려는 경우이 날짜는 모델에 있으므로 컨트롤러를 통해 액세스해야합니다. 가장 가능성있는 경우는보기에 레이블을 저장하려는 것 (레이블을 계산해야 함) 일 수 있습니다.

+0

위대한 답변! 고맙습니다. – EasyCo

관련 문제