2015-01-15 3 views
0

Я новичок в ember.js и Эмбер-кли и имею это довольно основную проблему не будучи в состоянии принести определенное значение модели в моем ArrayController и манипулировать его здесь. Я прочитал несколько раз через ember.js документ о настройке контроллера и отображении моделейКак получить значения Ember-Data в ArrayController с использованием Ember-CLI?

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 embermagically, поэтому я могу получить его через model.nts? Прямо сейчас, мое приложение ember будет строить, но последовательность var , которая установлена ​​в функции типаSeq, остается неопределенной.

Было бы здорово услышать ответы от вас или получить ссылку на хороший учебник по этой теме!

ответ

0

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

Правильно ли я вижу, что это создаст массив длины, содержащий длину всех строк * nts * объекта контента? Как я получу, например, первый из этих поздних месяцев? Используя * this.get ('len', 1) * или что-то вроде * tthis.len [0] * внутри моей функции * typeSeq() *? – jessica

+0

У меня был второй взгляд и я понял, как получить значение * length *: поскольку ваше решение выполняет итерацию по каждому элементу в контенте в цикле * forEach *, каждая строка * nts * извлекается, а ее значение * length * просто добавляется к более раннее значение * length *. Поправьте меня, если я ошибаюсь. Я также реализовал это аналогично для своего свойства * seqData *, потому что у меня были проблемы с получением этих данных и раньше. Теперь это работает! – jessica

+0

изменил его на массив в моем примере вместо добавления длины каждой строки, вы можете получить доступ к первому элементу позже, используя this.get ('len') [0]; – flylib

Смежные вопросы