2014-12-29 2 views
1

내 모델 중 일부에 대해 동일한 계산 된 속성을 사용하고 싶습니다. 하지만 그 대신이 같은 모든 단일 모델에서 동일한 기능을 쓰는 :EmberJS : 계산 된 속성에 대해 함수를 배치 할 위치는 어디입니까?

imageURL: function(){ 
    var path = '/images/', 
     ext = ".jpg"; 
    return path + this.get('shortID') + ext; 
}.property('shortID') 

나는 곳이 makeImageURL 기능이

imageURL: function(){ 
    return makeImageURL(this.get('shortID')); 
}.property('shortID') 

처럼 뭔가를하고 싶은 :

makeImageURL = function(shortID) { 
    var path = '/images/', 
    ext = ".jpg"; 
    return path + shortID + ext; 
} 

그러나 어디에서? BTW Ember-CLI를 사용하고 있습니다.

+0

같은 일부 모델에서 사용,하지만 당신은 또한 자신의 계산 된 속성 정의를 작성할 수, 그 어렵지 않다 꽤 유용한 것으로 밝혀졌습니다. ember 문서의 관련 섹션을 참조하십시오. –

답변

1

imageURL을 구성 요소 내부의 계산 된 속성으로 만들 생각을 했습니까? 이렇게하면 필요한 경우 언제든지 구성 요소를 재사용 할 수 있습니다.

또 다른 옵션은 전달 된 매개 변수를 기반으로 imageURL을 계산하는 ember 핸들 막대 도우미를 만드는 것입니다. 거기에 당신과 같이 이미지에 대한 귀하의 유틸리티 기능을 배치 할 수 있습니다, app/utils/image에 새 파일을 만들 것이다, 당신은 터미널에서 ember g util image을 실행 ember-cli으로 here

+0

핸들 바 도우미로 해결했습니다. 고맙습니다! – PDXIII

2

참조 :

export default { 
    makeImageURL: function(shortID) { 
    var path = '/images/', 
     ext = ".jpg"; 
    return path + shortID + ext; 
    } 
}; 

을 당신은 그것을 사용할 수 있습니다

import { makeImageURL } from 'utils/image'; 
+0

이것은 꽤 좋은 것입니다. 나는 다른 목적으로 그것을 사용할 것이다. – PDXIII

1

다른 방법과 모델을 사용하는 것입니다 Mixins

// app/mixins/image.js 
import Ember from 'ember'; 

export default Ember.Mixin.create({ 
    imageURL: function(){ 
     var path = '/images/', 
     ext = ".jpg"; 
     return path + this.get('shortID') + ext; 
    }.property('shortID') 
}); 
도우미가 당신을 위해 작동하는 경우

가 괜찮아요

// app/models/some-model.js 
import DS from 'ember-data'; 
import ImageUrl from '../mixins/image'; 

export default DS.Model.extend(ImageUrl, { 
    dummy: DS.attr('string') 
});