如何使用 Ember-CLI 在 ArrayController 中获取 Ember-Data 值

How do I fetch Ember-Data Values in an ArrayController using Ember-CLI?

本文关键字:获取 Ember-Data ArrayController 何使用 Ember-CLI      更新时间:2023-09-26

我是Ember.js和Ember-cli的新手,并且有一个相当基本的问题,无法在我的ArrayController中获取特定的模型值并在此处进行操作。我多次阅读了关于控制器设置和模型显示的 ember.js 文档

http://emberjs.com/guides/controllers/representing-multiple-models-with-arraycontroller/

但还没有找到解决我的情况的方法。

以下是我的路由、控制器和模型文件:

    // /routes/sequences.js
import Ember from 'ember';
var SequencesRoute =  Ember.Route.extend({
        model: function() {
                return this.store.find('sequences');
        },
        setupController: function(controller, model) {
                this._super(controller, model);
        }
});

export default SequencesRoute;

// /controllers/sequences.js
import Ember from 'ember';
var SequencesController = Ember.ArrayController.extend({
    init: function() {
                 this._super();
                 this.typeSeq();
    },
    i: 0,
    seqData: function(){
                var seq =  this.get('model.nts');
                return seq;
    }.property('model.nts'),
    len: function(){
                var slen = this.get('seqData');
                return slen.length;
    }.property('seqData'),
    typeSeq: function() {
                var tthis = this;
                var sequence = this.get('seqData');
                var lenn = this.get('len');
                 if (tthis.i <= lenn){
                        console.log(tthis.i);
                        console.log(sequence.substring(tthis.i,tthis.i+1));
                        tthis.i++;     
                        Ember.run.later(function(){
                                   tthis.typeSeq();
                                   }, 200
                        );             
                }
                else{
                        return false;
                }
        }
});
export default SequencesController;

// /models/sequences.js
import DS from 'ember-data';
var Genes = DS.Model.extend({
geneName: DS.attr('string'),
nts: DS.attr('string')
});
Genes.reopenClass({
FIXTURES: [
{
id: 1,
geneName: "Monoamine Oxidase A",
nts: "CTGCAGCGAGCGCGGGAAGCGGGACAGGGCCTAGAGTCACTTCTCCCCGCCCCTGACTGGCCCG"
},
{
id: 2,
geneName: "Monoamine Oxidase B",
nts: "TTTCTGCAGCGAGCGCGGGAAGCGGGACAGGGCCTAGAGTCACTTCTCCCCGC"
}
]
});
export default Genes;

特别是在我的控制器中设置 seqData 的属性对我来说不清楚。究竟必须调用什么才能将我的模型数据放入属性中?我的路由器中的 setupController 方法是否会在我的 ArrayController 中设置一个模型属性,以便我可以通过 model.nts 获取它?现在,我的余烬应用程序将构建,但在 typeSeq 函数中设置的 var 序列仍未定义。

很高兴听到您的一些答案或获取有关此主题的精彩教程的链接!

1)我相信序列应该是单数的,但也许另一种方式有效?

return this.store.find('sequence'); 

而不是

return this.store.find('sequences');

2)无需做所有init/seqData的事情,数组控制器的内容属性将自动设置为从路由模型钩子中this.store.find('sequence');,你可以这样做

len: function(){
    var length = [];
    this.get('content').forEach(function(item) {
           length.push(item.get('nts').length);
     });
    return length;
}.property('content'),