对于我的一些模型,我想使用相同的计算属性。但不是像这样在每个模型中编写相同的函数:
imageURL: function(){
var path = '/images/',
ext = ".jpg";
return path + this.get('shortID') + ext;
}.property('shortID')
我想要这样的事情
imageURL: function(){
return makeImageURL(this.get('shortID'));
}.property('shortID')
将makeImageURL函数放在某个地方:
makeImageURL = function(shortID) {
var path = '/images/',
ext = ".jpg";
return path + shortID + ext;
}
但是在哪里?顺便说一下,我使用的是Ember-CLI。
答案 0 :(得分:2)
使用ember-cli
您在终端中运行ember g util image
,这将在app/utils/image
中创建一个新文件,您可以在其中放置实用程序功能,如下所示:
export default {
makeImageURL: function(shortID) {
var path = '/images/',
ext = ".jpg";
return path + shortID + ext;
}
};
您可以使用
在模型中使用它import { makeImageURL } from 'utils/image';
答案 1 :(得分:1)
您是否考虑过在组件中创建imageURL
计算属性?这样,您可以在需要时重用该组件。
另一种选择是创建一个ember handlebars helper,它根据传递给它的参数计算imageURL
。见here
答案 2 :(得分: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')
});