2016-04-10 20 views
1

Bu çözümü bir Ember.js uygulamasına uygulamayı deniyorum. https://stackoverflow.com/a/3224854/2084924 Açıkçası jsfiddle'ta çalışıyor, ancak bunu Ember'de doğru şekilde uygulayamıyorum.Tarih Farkı Ember.js'de Hesaplanıyor

Öğreniyorum ve muhtemelen bariz bir hata yapıyoruz. Fonksiyonu modelin içine yerleştirdim ve bir "NaN" hatası alıyorum. Bir tarih, M/D/YYYY formatındaki bir giriş değeriyle geçirilir. Herkesin tarihleriyle ve tecrübeyle deneyimi var mı? Tarihin ayrılmasının neden başarısız olduğunu anlayabiliyor musun?

//app/model/task.js 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
    taskname: DS.attr(), 
    startdate: DS.attr(), 
    enddate: DS.attr(), 
    duration: Ember.computed('startdate', 'enddate', function() { 
    var date1 = new Date('startdate'); 
    var date2 = new Date('enddate'); 
    var timeDiff = Math.abs(date2.getTime() - date1.getTime()); 
    var diffDays = Math.ceil(timeDiff/(1000 * 3600 * 24)); 
    return diffDays; 
    }), 
    banding: DS.attr() 
}); 

cevap

3

Sen modelinden değerleri okumuyorsun, sadece dizeleri "startdate" ve tarihlerine "enddate" dönüştürmek çalışıyoruz. new Date(this.get('startdate')); olmalıdır.

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    taskname: DS.attr(), 
    startdate: DS.attr(), 
    enddate: DS.attr(), 
    duration: Ember.computed('startdate', 'enddate', function() { 
    var date1 = new Date(this.get('startdate')); 
    var date2 = new Date(this.get('enddate')); 
    var timeDiff = Math.abs(date2.getTime() - date1.getTime()); 
    var diffDays = Math.ceil(timeDiff/(1000 * 3600 * 24)); 
    return diffDays; 
    }), 
    banding: DS.attr() 
}); 
+0

deneyin! Birisi onu işaret ettiğinde mükemmel bir anlam ifade eder. teşekkür ederim. – manisha

1

Bu kodu elbette

//app/model/task.js 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
    taskname: DS.attr(), 
    startdate: DS.attr(), 
    enddate: DS.attr(), 
    duration: Ember.computed('startdate', 'enddate', function() { 
    var self = this; 
    var date1 = new Date(self.get('startdate')); 
    var date2 = new Date(self.get('enddate')); 
    var timeDiff = Math.abs(date2.getTime() - date1.getTime()); 
    var diffDays = Math.ceil(timeDiff/(1000 * 3600 * 24)); 
    return diffDays; 
    }), 
    banding: DS.attr() 
}); 
+0

Bu, yukarıdakiyle aynı nedenden dolayı çalışır. Nesneden değeri çağırmıyordum. teşekkür ederim. – manisha

+0

Bu senaryoda 'var self = this;' öğesini atamaya gerek yoktur. Sadece bir tür geri arama içinde yeniden kullanmak istiyorsanız (ve daha sonra bir ok işlevi daha temiz kod üretecektir) sadece ihtiyaç duyulur. –

+0

@ Karl-JohanSjögren evet, fonksiyonda herhangi bir geri çağırma olup olmadığından emin olmak için yapıyorum.ama doğru hakkın var – Shayan