2014-06-10 2 views
2

현재 ember-cli를 사용하여 Ember.js 앱을 제작 중입니다.전역을 건드리지 않고 reopenClass 내의 컨테이너에 어떻게 액세스합니까?

모델에 대한 reopenClass 내에서, 나는 엠버 데이터를 사용하려면 "저장"을 필요

Business.reopenClass({ 

    search: function(params) { 
    # nope, there is no "store" on the class/static object 
    var store = this.store; 
    } 

}); 

내가 세계를 사용할 수 있다는 것을 알고 있지만, 전역 그렇게 더러운 :

Business.reopenClass({ 

    search: function(params) { 
    # this works, but the `window` global & `__container__` accessor are verbotten 
    var store = window.App.__container__.lookup("store:main"); 
    } 

}); 

클래스/정적 함수에서 lookup 또는 lookupFactory을 어떻게 사용합니까?

+0

이 클래스는 네임 스페이스에 바인딩되지 않습니다. 더 나은 질문은 비즈니스 란 무엇입니까 (설명 된 "모델"을 제외하고). 왜 상점을 원하십니까? 아니면 상점에 상점을 추가하기 위해 인젝터를 사용해야합니까? – Kingpin2k

+0

모델의 클래스에 #search 함수를 정의하여 가능한 한 Ember Data 내부를 최대한 재사용하여 사용자 정의 AJAX 호출을 작성하고 결과를 추출하려고합니다. – Mars

+0

검색이 더 적절하게 경로 또는 컨트롤러에 속한 것처럼 보입니다 – Kingpin2k

답변

1

발견 된 솔루션; 다음의 Ember 가드 레일을 따르십시오.

My Business # 검색 방법은 RESTAdapter # ajax를 사용하여 맞춤 AJAX를 수행합니다. Container # 조회가 가능한 어댑터로 적절하게 이동했습니다.

var BusinessAdapter = ApplicationAdapter.extend({ 

    search: function(params) { 
    // first class access to the container 
    var store = this.container.lookup("store:main"); 
    // ... 
    var promise = this.ajax(url, "GET", { data: params }).then(function(adapterPayload) { 
     // ... 
    }); 
    return promise; 
    } 

});