2014-12-05 7 views
0

저는 이틀 동안 작업 해 왔으며 총알을 물고 도움을 요청했습니다.런타임시 Ember 모델을 동적으로 생성 및 제거

ember-cli를 사용하고 있으며 일부 메타 데이터를 기반으로 런타임에 Ember Models를 동적으로 만들려고합니다. 샘플 유스 케이스는 사용자가 데이터 세트 (쿼리, 파일 등)를 지정하려는 경우입니다. 사용자의 데이터 파일을 읽고 파일의 구조에 따라 모델을 설정하고 싶습니다.

Ember Data and Fixtures (간단히하기 위해)를 사용하는 ember-cli 응용 프로그램을 성공적으로 설치했습니다. 내 정적 예제에는 세 가지 모델이 있으며 Chrome Ember 디버거를 사용할 때 스토어에서 모델과 데이터를 볼 수 있습니다. 나는 성공적으로

var IndexRoute = Ember.Route.extend({ 

    init: function() { 
     // Create a simple model dynamically 
     var MyModel = DS.Model.extend({ 
      defineAttributes: function(){ 
       Ember.defineProperty(this, 'col1', DS.attr()); 
       Ember.defineProperty(this, 'col2', DS.attr()); 
       Ember.defineProperty(this, 'col3', DS.attr());  
      }.on('init') 
     }); 

     // insert some data into our model 
     MyModel.reopenClass({ 
      FIXTURES: [ 
      { 
       id: '1', 
       col1: "key1", 
       col2: "value1", 
       col3: "value2" 
      }, 
      { 
       id: '2', 
       col1: "key2", 
       col2: "value1", 
       col3: "value2" 
      },    
      { 
       id: '3', 
       col1: "key3", 
       col2: "value1", 
       col3: "value2" 
      }  
      ] 
     }); 
    } 
}); 

문제 IndexRoute에를 설정하여 런타임에 모델을 정의 할 수 있었다

내 동적 예에 이제

는 ... 내가 볼 수 없다는 것입니다 모델이 배치 된 위치는 Chrome 디버거의 데이터 (상점)에 표시되지 않습니다.

MyModel의 정의를 Ember.Application.MyModel으로 변경하면 모델이 콘솔에 Ember.Application 아래에 정의되어 있지만 여전히 Ember 디버거에서 볼 수 없다는 것을 알 수 있습니다.

난 후 다음과 같이 model 후크를 추가하려면 위의 예제를 확장하려고 :

var IndexRoute = Ember.Route.extend({ 

    init: function() { 
     ... 
    }, 
    model: function() { 
     return this.store.findAll('my-model'); 
    } 
}); 

그러나 this.store.findAll('my-model')에 대한 호출이 두 경우 모두 실패합니다. 나는 물건을 올바르게 배선하고 있지 않다고 가정하고 있습니다. 내 예에서

는 나도 그래서 나는 정말 런타임에 프로그램 내 모델의 이름을 만드는 방법을 알고 싶어요 또한 내 모델의 이름은 동적 아니라는 것을 알고 있습니다.

은 정말 내가 엠버 컨벤션 접근 방식을 통해 전체 구성에 정말 감동했기 때문에 프레임 워크와 경험이 많은 사람 거기 사람들의 도움이나 안내를 부탁드립니다.

감사합니다,

데이브

+0

이 작업이 끝나면 Ember에 대해 지금까지 결코 원하지 않는 것보다 훨씬 많은 것을 배울 것입니다. –

답변

1

당신은 본질적으로 무엇인가를 정의하고, 그럼 그것을 멀리 던져. 앱의 네임 스페이스에 연결해야합니다 (Ember-cli를 사용하는 경우 색인 파일이나 구성 파일에서 볼 수 있습니다). init

또한, 내가 정의하는 의심 속성은 수도, 작동하지만 실제로는 필요하지 않습니다.

셋째, Ember Data를 사용하고 싶습니까? 엠버 데이터 (Ember Data)는 매우 독창적이며, 당신이 사물을 정의하고 싶지 않은 것처럼 들립니다.

관련 문제