【问题标题】:How do I fetch Ember-Data Values in an ArrayController using Ember-CLI?如何使用 Ember-CLI 在 ArrayController 中获取 Ember-Data 值?
【发布时间】:2015-03-14 10:26:18
【问题描述】:

我是 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 属性,以便我可以通过 model.nts 获取它吗?现在,我的 ember 应用程序将构建,但在 typeSeq 函数中设置的 var sequence 仍未定义。

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

【问题讨论】:

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


    【解决方案1】:

    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'),
    

    【讨论】:

    • 我看对了吗,这将创建一个长度数组,其中包含内容对象的所有字符串 nts 的长度?稍后我将如何获取这些长度中的第一个?通过在我的函数 typeSeq() 中使用 this.get('len',1) 或类似 tthis.len[0] 的东西?
    • 我再看一遍并意识到如何获得 length 值:由于您的解决方案在 forEach 循环中遍历内容中的每个项目,每个字符串 nts 都会被提取,并且它的 length 值只是添加到之前的 length 值中。纠正我,如果我错了。我也对我的 seqData 属性进行了类似的实现,因为我之前也遇到了获取该数据的问题。现在,它起作用了!
    • 在我的示例中将其更改为数组,而不是添加每个字符串的长度,稍后您可以使用 this.get('len')[0]; 访问第一个元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多