在Ember.js中,如何创建一个计算属性,该属性引用包含数组的属性中的第一项

时间:2014-03-19 00:55:09

标签: javascript ember.js ember-data

我的测验装置有一个名为questions的属性,这是一组相关问题的ID。我想在名为firstQ的模型上创建一个计算属性,该属性返回questions数组中的第一个id。最终我想把这个id用来链接到我创建的问题路径。

我无法弄清楚,如何访问问题数组中的第一个id。这是解决这个问题的最佳方法吗?请帮忙。

App.ApplicationAdapter = DS.FixtureAdapter.extend();

App.Quiz = DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string'),
  questions: DS.hasMany('question', {async: true}),
  firstQ: function() {
    return this.get('questions')//where to go next?, on right track?;
  }.property()
});

App.Question = DS.Model.extend({
  question: DS.attr('string'),
  quiz: DS.belongsTo('quiz', {async: true}),
  answers: DS.attr('string')
});

//fixtures
App.Quiz.FIXTURES = [
  {
    id: 1,
    name: 'The JavaScript Quiz',
    description: 'take this quiz and find out if you\'re a super genious',
    questions: [100,101]
  }
];

App.Question.FIXTURES = [
  {
    id:100,
    question: 'Inside which HTML element do we put the JavaScript',
    quiz: 1,
    answers: [
      { answer: 'alpha', weight: 0 },
      { answer: 'beta', weight: 5 }
    ]
  }
]

2 个答案:

答案 0 :(得分:1)

好的,所以我想出了如何通过模型上的计算属性来做到这一点。这是App.Quiz模型的更新代码:

App.Quiz = DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string'),
  questions: DS.hasMany('question', {async: true}),
  firstQuestion: function() {
    return this.get('questions.firstObject');
  }.property('questions.firstObject')
});

答案 1 :(得分:0)

您可以使用Ember Arrays的firstObject属性在firstQquestions数组中的第一个Id之间创建绑定。将您的firstQ属性定义为此类绑定

App.Quiz = DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string'),
  questions: DS.hasMany('question', {async: true}),
  firstQBinding: 'questions.firstObject'
});