2011-07-04 4 views
1

데이터 소스와 관련 모델을 sproutcore에서 검색하려고합니다. 누군가가이 모든 것을 더 잘 이해할 수 있을지 궁금한 점이 없습니다.Sproutcore 데이터 소스와 관계가있는 새 레코드 만들기

기본적으로 클라이언트와 브랜드라는 두 개의 관련 모델이 있습니다. 클라이언트는 많은 브랜드를 가질 수 있으며 브랜드는 단일 클라이언트를 가질 수 있습니다. 모델을 올바르게 정의했으며 모든 것이 예상대로 되돌아옵니다. 내가 겪고있는 문제는 새로운 브랜드를 만들고 그 관계를 설정하는 방법을 찾는 것입니다. 그래서 내가 무작위로 그것을위한 새로운 ID (createRecord에 두 번째 인수)를 생성 새로운 브랜드로

var brand = DBs.store.createRecord(DBs.Brand, { 
    title: this.get('title') 
}, Math.floor(Math.random()*1000000)); 

brand.set('client', this.get('client')); 

MyApp.store.commitRecords(); 

: 그래서 내 브랜드 컨트롤러에서 나는 createBrand 방법과 같이 있습니다. 이것은 새 데이터베이스에서 내 데이터 소스의 createRecord를 호출하여 새 Brand를 작성한 다음 클라이언트의 updateRecord도 호출합니다.

내가 겪고있는 문제는 clientUpdate가 임시로 (임의로 생성 된 ID) 관계에 전달된다는 것입니다. 새 브랜드를 만드는 방법을 어떻게 구성해야합니까? 서버가 새로 생성 된 브랜드 ID를 반환하고 클라이언트 관계를 업데이트 할 때까지 기다려야합니까? 그렇다면 어떻게해야할까요?

감사

마크

답변

2

오른쪽의 SproutCore를의 IRC 채널에 앉아 그가 직접 나를 위해 모든 서버 상호 작용을 처리 할 수있는 프레임 워크를 만드는 것이 좋습니다 mauritslamers 이야기 후.

그래서 모든 모델, 상점 및 데이터 소스를 포함하는 CoreIo라는 프레임 워크를 설정했습니다. 는 데이터 소스에만 서버 예에서 레코드를 가져 오는에 사용되는 : 그런 다음 CoreIo 프레임 워크 내 모델 생성 방법은

fetch: function(store, query) { 
    var recordType = query.get('recordType'), 
     url = recordType.url; 


    if (url) { 
     SC.Request.getUrl(CoreIo.baseUrl+url) 
      .header({ 'Accept': 'application/json'}) 
      .json() 
      .notify(this, '_didFetch', store, query, recordType) 
      .send(); 

     return YES; 
    } 

    return NO; 
}, 


_didFetch: function (response, store, query, recordType) { 
    if (SC.ok(response)) { 
     store.loadRecords(recordType, response.get('body')); 
     store.dataSourceDidFetchQuery(query); 
    } else { 
     store.dataSourceDidErrorQuery(query, response); 
    } 
}, 

을 즉했습니다

CoreIo.createBrand = function (brand, client) { 
    var data = brand, 
     url = this.getModelUrl(CoreIo.Brand); 

    data.client_id = client.get('id'); 

    SC.Request.postUrl(url) 
     .json() 
     .notify(this, this.brandDidCreate, client) 
     .send(data); 
}; 

CoreIo.brandDidCreate = function (request, client) { 
    var json = request.get('body'), 
     id = json.id; 

    var ret = CoreIo.store.pushRetrieve(CoreIo.Brand, id, json); 
    var brand = CoreIo.store.find(CoreIo.Brand, id); 

    if (ret) { 
     client.get('brands').pushObject(brand); 
    } 
}; 

나는 다음이 '행동'으로 부를 것이다 관계를 설정하는 새 모델을 만들 수 있습니다.