2015-10-21 5 views
-1

У меня есть служба часы -clock.jsEmber- 1,13 служба не инициализируется в компоненте

import Ember from 'ember'; 
var ONE_SECOND = 2000; 

export default Ember.Object.extend({ 
    time : null, 
    second : null, 
    tick: function() { 
    var clock = this; 

    Ember.run.later(function() { 
     var now = new moment(); 
     clock.setProperties({ 
     time : now, 
     second : now.seconds() 
     }); 
    }, ONE_SECOND); 

    }.observes('second').on('init') 
}) 

который я инициализировать, как

export function initialize(container, application) { 
    container.optionsForType('service:clock', { singleton: true }); 
    application.inject('route', 'clockService', 'service:clock'); 
    application.inject('controller', 'clockService', 'service:clock'); 
    application.inject('component', 'clockService', 'service:clock'); 
} 

export default { 
    name: 'clock-service', 
    initialize: initialize 
}; 

Я использую часы тикер вычислить истекшее время (я используя moment.js).

timeElapsed : function(){ 
    var clock = this.get('clockService').get('time'); 
    var createdTime = new moment(this.get('request.createdAt')); 
    var duration = moment.duration(clock.diff(createdTime)); 
    if(duration._data.hours > 0) return duration._data.hours+" hrs"; 
    if(duration._data.minutes > 0) return duration._data.minutes+" mins"; 
    if(duration._data.seconds > 0) return duration._data.seconds+" secs"; 
    return duration._data.seconds; 
    }.property('request.createdAt','clockService.second') 

Теперь проблема заключается в том, что услуга вводится в компоненты, но свойства не заданы.

+0

Ваш код работает в общем: http://emberjs.jsbin.com/moviji/edit?js,console К слову, 'time' переменной при вычислении TimeElapsed может быть пустым при первом вызове. – Microfed

+0

Для каждой секунды есть функция наблюдателя, которую нужно пересчитать? Это звучит так неправильно. XD «ONE-SECOND: 2000»: D –

+0

Я изменил его на две тысячи, потому что я думал, что может произойти гоночное состояние, а затем я забыл изменить переменную. – shivendra

ответ

1

Я был в состоянии заставить его работать здесь, с некоторыми изменениями:
http://emberjs.jsbin.com/sexiqu/1/edit?html,js,output

Пожалуйста, посмотрите на ClockServiceComponent.

Единственное, что я делаю иначе, чем ваш код, - это вычисляемое свойство с «clock.time» в качестве его зависимого ключа, поэтому вычисляемое свойство будет оцениваться lazy каждую секунду.

Ember.Application.initializer({ 
    name: 'registerClock', 

    initialize: function(container, application) { 
    application.register('clock:main', Ember.clockService); 
    } 
}); 

var ONE_SECOND = 1000; 

Ember.clockService = Ember.Service.extend({ 
    time : null, 
    second : null, 
    tick: function() { 
    var self = this; 

    Ember.run.later(function() { 
     var now = new moment(); 
     self.setProperties({ 
     time: now, 
     second: now.seconds() 
     }); 
    }, ONE_SECOND); 
    }.observes('second').on('init') 
}); 

Ember.Application.initializer({ 
    name: 'injectClockService', 
    initialize: function(container, application) { 
    application.inject('controller', 'clock', 'clock:main'); 
    application.inject('route',  'clock', 'clock:main'); 
    application.inject('component', 'clock', 'clock:main'); 
    } 
}); 

App = Ember.Application.create(); 
App.Router.map(function() { 
    // put your routes here 
}); 

App.IndexRoute = Ember.Route.extend({}); 

App.ClockServiceComponent = Ember.Component.extend({ 
    second: Ember.computed('clock.time', function() { 
    return this.get('clock.second'); 
    }) 
}); 
Смежные вопросы