2013-07-15 2 views
2

연습으로 튜토리얼을 따라 한 후 첫 번째 EmberJS 앱을 개발하고 있습니다. 단순히 '테이블', '열'및 데이터베이스와 유사한 '행'목록을 포함합니다. 문제가있는 페이지Ember.js : 모델에서 객체를 반복 할 수있는 적절한 방법은 무엇입니까?

링크 : http://www.kangarooelectronics.com/fakeDB/#/tables/edit/2

내 문제는 그 내가 얻을 열 제거 갈 때 : 개체 번호가있는 방법이 없습니다 '를 deleteRecord' 나는이 물체에 의한 알고있는 것처럼 목록 작성에 사용하는 배열을 작성하는 방식 때문에 컨트롤러에 대한 참조가없는 것을 반복하고 있습니다.

{{#each model itemController='TableList'}} 
    <a {{action removeTable this}}>Delete</a> 
{{/each}} 

내가 통해 열을 반복하고 있습니다 :

제거 테이블이 다음과 같은 방식으로 나열되는, 잘 작동 비품에서

{{#each column in currentColumns itemController='TablesEdit'}} 
    <a {{action removeColumn column}}>Drop</a> 
{{/each}} 

코드 조각은 객체 :

FakeDB.Table.FIXTURES = [ 
    { 
     id: 1, 
     name: 'Users', 
     columns: { 
      1:{'colId':1, 'name':'name'}, 
      2:{'colId':2, 'name':'favorite color'}, 
      3:{'colId':3, 'name':'phone number'} 
     }, 
// ...snip... // 

다음을 통해 'currentColumns'가 표시됩니다.

FakeDB.Table = DS.Model.extend({ 
    name: DS.attr('string'), 
    columns: DS.attr('object'), 
    rows: DS.attr('object'), 
    currentColumns: function() { 
     var newColumns = $.map(this.get('columns'), function(k, v) { 
      return [k]; 
     }); 
     return newColumns; 
    }.property('columns'), 
// ..snip.. // 

여기 내 문제를 볼 수 있습니다. 내 '열'이 내 컨트롤러에서 어떤 메소드도 가지지 않을 것임을 분명히합니다. 나는 다음과 같은 것을 시도했다.

FakeDB.Adapter = DS.FixtureAdapter.extend(); 

FakeDB.Adapter.map('FakeDB.Table', { 
    columns: {embedded: 'load'}, 
    rows: {embedded: 'load'} 
}); 

FakeDB.Columns = DS.Model.extend({ 
    colId: DS.attr('integer'), 
    name: DS.attr('string') 
}); 

FakeDB.Rows = DS.Model.extend({ 
    colId: DS.attr('integer'), 
    name: DS.attr('string') 
}); 

그러나 {{# 열의 열 개수}}를 처리 할 수 ​​없었다.

제안 사항? 나는 다시 문서를 읽을 것이고 해결책을 찾으면 다시 게시 할 것이다. 감사합니다.

편집 : 그래서 나는 다른 해결책을 찾았지만 여전히 약간의 문제가 있습니다.

열이 ...

로 구성되어 있습니다 ... 그래서 현재 페이지에 참조하는 테이블 ID와 아이템을 얻을로 '== 1 item.tableID'대체 무슨

FakeDB.Table = DS.Model.extend({ 
    name: DS.attr('string'), 
    columns: FakeDB.Columns.find().filter(function(item, index, self) { 
     if(item.tableID == 1) { return true; } 
    }) 
}); 

아직 확실하지

FakeDB.Columns.FIXTURES = [ 
    { 
     id: 1, 
     tableID: 1, 
     name: 'name' 
    }, 
// ...snip... // 

하지만 지금 내가 얻을 : 주장 실패 : 응용 프로그램이 정의 된 '스토어'속성이 없습니다. 모델 클래스에서 '찾기'를 호출하려는 시도는 실패합니다. 와 같은 하나를 입력하십시오 'YourAppName.Store = DS.Store.extend()'

내가

+0

업데이트 : 이 거의 다, 열이 FakeDB.Table에서 참조 제거. FakeDB.TablesEditRoute를 만들었으며 params.table_id를 읽을 수 있습니다. 그냥 열을 필터링해야하고 작동합니다 (모든 ATM을 나열 할 수 있음). 그런 다음 관계 측면에 대해 연구하고보다 효율적으로 작업해야합니다. – user981408

답변

1

...에 '저장'속성을 정의하는 사실 나는 내가 처음으로 EmberJS 응용 프로그램을 개발하고 있어요 연습으로 튜토리얼을 따라 가세요. 단순히 '테이블', '열'및 데이터베이스와 유사한 '행'목록을 포함합니다.

대부분의 데이터베이스는 테이블, 행 및 열의 목록을 포함합니다. 대부분의 웹 응용 프로그램에는 사전 정의 된 열과 동적 행 목록이있는 고정 된 표 세트가 있습니다.이것이 첫 번째 엠버 애플 리케이션이라면 나는 당신을 행복한 길로 인도하는 무언가로 시작하는 것이 좋습니다.

나는 '스토어'속성을 정의하는 사실입니다 ...

사실이지만 타다 남은 타다 남은 응용 프로그램이 초기화되기 전에 가게를 사용할 수 없기 때문에 불평이다. 저장소에 액세스하는 모든 것이 프레임 워크 훅에 있어야합니다. 어쨌든 많은 의미를 가지지 않는 객체를 정의 할 때 사용할 수 없습니다. 당신이해야 할 의미 아마 어떤

이 같은 columns라는 계산 된 속성을 확인했다 :

FakeDB.Table = DS.Model.extend({ 
    name: DS.attr('string'), 
    columns: function() { 
    FakeDB.Columns.find().filter(function(item, index, self) { 
     if(item.tableID == 1) { return true; } 
    }) 
    }.property('') 
}); 
+0

감사합니다. 매우 유용합니다. – user981408

관련 문제