2012-07-13 4 views
3

나는 엠버를 배우고있다. js, 나는 아직 그것으로 아무것도 만들지 않았다.Ember.js - 중첩 컬렉션의 컨트롤러를 바인딩하려면 어떻게해야합니까?

저는 데이터를 모델 객체에 저장하고 컨트롤러를 사용하여 뷰와 모델 사이에 접착제 역할을합니다. 콘트롤러는 모델의 인스턴스로 설정된 콘텐트를 가지고 있으며, 뷰는 콘트롤러의 컨텐트에 대한 바인딩을 가지고있다 (따라서 프록시에 의해 모델에 바인딩된다). 좋아요 :

// js 
App.MyModel = Ember.Object.extend({foo:''}); 
App.myController = Ember.Object.create({ 
    content: App.MyModel.create() 
}); 

// html 
{{view Ember.TextInput valueBinding="App.myController"}} 

지금까지 그렇게 좋았습니다. 하지만 중첩 된 컬렉션이 패러다임을 적용하는 방법을 모른다 : http://jsfiddle.net/DwheG/

내가 부탁 해요 것은 :

여기
//js 
App.ChildController = Ember.ArrayController.extend(); 
App.NestedModel = Ember.Object.extend({ 
    init: function() { 
     this._super(); 
     this.set('children', []); 
     // Here: I can't give a global name for the content binding, and I don't know how to give a relative one 
     this.set('childController', App.ChildController.create({contentBinding: 'children'); 
    } 
}); 
App.myController = Ember.ArrayController.create({ 
    content:[], 
    newChild: function() { 
     this.pushObject(App.NestedModel.create()); 
    } 
}); 


// html 
{{#collection contentBinding="App.myController"}} 
    {{#collection contentBinding="content.childController"}} <!-- nope --> 
     {{content.childField}} 
    {{/collection}} 
{{/collection}} 

당신이 바이올린 수있는 뭔가

  1. 심지어 내가 오전 물건을 정확하게 모델링 했습니까?
  2. 어떻게 하위 컨트롤러의 콘텐츠를 바인딩합니까? 문자열을 사용해야합니까? 물건을 건네 주면 (this) 나를 위해 일하지 않았다. 엠버의 경로 결정은 어디서나 문서화되어 있습니까?
  3. 중첩 된 컨트롤러에 중첩 된 컬렉션 도우미를 바인딩하려면 어떻게해야합니까?
+0

하하 stackoverflow 제거 내 질문의 시작 부분에 "안녕하세요"... 그리고 hvgotcodes는 "세계"를 제거 :) – peets

답변

0

소스를 읽고 경로로만 바인딩을 지정할 수 있음을 확인했습니다.

Ember는 경로를 확인하기 위해 getPath(root, path)을 사용합니다. root은 찾고자하는 객체이며 path는 문자열입니다. 경로가 전역 인 경우 루트 요소를 생략 할 수 있습니다 (이 경우 루트는 window으로 설정 됨). 예를 들어, getPath(myController, 'foo.bar')은 평가할 때 myController.foo.bar을 반환합니다.

그래서 : 어떻게 든 바인딩을 생성하기 위해 내 배열에 대해 포함하는 객체를 참조해야하고이 작업을 수행 할 수있는 기본 제공 기능이 없다는 점을 감안할 때, 모델. 여기를 참조하십시오 : http://jsfiddle.net/CP448/1/

관련 문제