2013-05-07 2 views
2

У меня есть маршрут, который находит объект день используя день неделиКак перерисовать шаблон с использованием кэшированного свойства в ember.js?

//assume I have a configuration model for 7 days (1 for each week day basically) 
var day_of_week = ev.date.getDay() + 1; 
var model = App.Day.find(day_of_week); 
model.set('date', selected_date); //selected_date is mm/dd/yyyy (input from user) 
router.transitionTo('day', model); 

В этом маршруте я перенаправлять на другой, который знает о связанном объекте

App.DayRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('appointments'); 
    }, 
    serialize: function(model) { 
     return {day_date: model.get('date')}; 
    } 
}); 

В этом шаблоне я каждый над объектами

{{#each appointment in controller}} 
    {{appointment}}<br /> 
{{/each}} 

Это основное свойство вычисленная

appointments: function() { 
    //do stuff in here 
}.property() 

Что я заметил, так это то, что когда я впервые загружаю тот день, когда вычисленное свойство (в самой нижней части стека, показанное выше) вызывается так, как должно быть. Но когда я вернусь к этому дню, я не могу заставить вычислимое свойство срабатывать (предполагая, что это уже загруженная/кэшированная модель в памяти).

Мне нужно перезагрузить это, потому что я меняю дату (даже если остальная часть объекта точно такая же).

Как заставить эту повторную визуализацию/ака-стоп кэшировать свойство при изменении даты? Я пытался изменить свойство для запуска при изменении даты, но до сих пор нет костей ...

appointments: function() { 
    //do stuff in here 
}.property('date') 

Update -showing полной модели ж/вычисленного собственности

Моих назначений вычислено свойство (показано выше) на самом деле висит от моей модели (поскольку это конфигурация на основе модели день)

App.Day = DS.Model.extend({ 
    times: [], 
    first: attr('string'), 
    last: attr('string'), 
    interval: attr('number'), 
    day_of_week: attr('number'), 
    date: attr('string'), 
    listings: function() { 
     return App.Appointment.find(this); 
    }.property(), 
    slots: function() { 
     var slots = App.Slot.find(); //this returns configuration -not persisted data from $.ajax) 
     for(var i = 0; i < slots.get('length'); i++) { 
      if (slots.objectAt(i).get('day_of_week') === this.get('day_of_week')) { 
       var slot = slots.objectAt(i); 
       slot.set('day', this); 
       this.get('times').push(slot); 
      } 
     } 
     return this.get('times'); 
    }.property(), 
    appointments: function() { 
     App.Appointment.clear(); //just resets this js array each time to get a fresh apt collection (again -because it's dynamic based on configuration) 
     var slots = this.get('slots'); 
     var interval = this.get('interval'); 
     for(var i = 0; i < slots.get('length'); i++) { 
      var entry = App.AppointmentFactory.create(slots.objectAt(i), interval); 
      App.Appointment.add(entry); 
     } 
     return this.get('listings'); 
    }.property() 
}); 

Update Опять

Похоже, я забыл показать указательный НАЗНАЧЕНИЯ маршрут -Очень важно, как он показывает, как я заполнить массив назначений для данной модели день

App.AppointmentsIndexRoute = Ember.Route.extend({ 
    model: function(params) { 
     var day = this.modelFor("day"); 
     return day.get('appointments'); 
    } 
}); 
+0

Где вычисленная недвижимость? В контроллере? – CraigTeegarden

+0

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

+0

. Что делать с вычисляемым свойством 'slotots()' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' слотов) '? – CraigTeegarden

ответ

1

Я думаю, что вам нужно включить @each для того, если Infact date появляется при каждом появлении назначения, а ваш вычислительный объект находится на уровне appointments.

В качестве альтернативы, вы можете предотвратить кеширование с использованием .volatile(), но это не должно быть необходимо для правильно определенных наблюдателей.

+0

похоже, что волатильна была недостающая ссылка. Я думал, что это было обесценено или говорилось о том, чтобы быть обесцененным некоторое время назад? –

+1

Окончательное решение для всех, кто следующий - я добавил изменчивость в списки/слоты/встречи –

1

Путь, чтобы найти ответ, чтобы увидеть код внутри appointments, чтобы выяснить, какие свойства вы используете эти изменения и которые должны быть использованы для пересчитывать appointments свойства

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