EmberJS:在哪里放置计算属性的函数?

时间:2014-12-29 15:01:23

标签: ember.js ember-data ember-cli

对于我的一些模型,我想使用相同的计算属性。但不是像这样在每个模型中编写相同的函数:

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。

3 个答案:

答案 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')
});