我正在尝试构建一系列复选框以检查一周中的几天,但我无法弄清楚如何在切换路线时保持正确的演示状态。
由于它保持了以前的状态(控制器是单例),我无法弄清楚每次转换时重新初始化它的最佳方法,以及当我尝试创建新的事件实例时。
设置如下(coffeescript表示法):
如此定义的数组控制器:
ProjectEventsController = Ember.ArrayController.extend
itemController: 'project/event'
项目控制器包含监视复选框
的观察者ProjectEventController = Ember.ObjectController.extend
mon:true
tue:true
wed:true
thu:true
fri:true
sat:true
sun:true
_days: []
eventId: undefined
eventObserver: (()->
if !@get('eventId')
@set 'eventId', @get('event.id')
@set '_days', @defaultDays
# if we have a recurrence days, we check the days that are already checked
# else we check them all
if @get('event.recurrence') and @get('event.recurrence.days')
console.log 'existing recurrence', @get('event.recurrence.days')
(@defaultDays.filter (day)=>
!@get('event.recurrence.days').contains day
).forEach (uncheckedDay)=>
console.log 'uncheckedDay', uncheckedDay
@set uncheckedDay.toLowerCase(), false
if (@get('event.recurrence') and @get('event.recurrence.days') == @defaultDays)
console.log 'all days checked', @get('event.recurrence.days'), @defaultDays
@set 'recurrenceEnabled', false
).observes('event.id')
_daysObserver: ((k,v)->
val = @get v
key = v.toUpperCase()
days = @get '_days'
if val
if !days.contains key
days.push key
else
days = days.filter (item)->
item != key
@set '_days', days
if @get 'event.recurrence'
@set 'event.recurrence.days', days.toArray()
else
@set 'event.recurrence', Ember.Object.create
type: 'weekly'
days: days
start_hhmm: @defaultHHmm
duration_seconds: @defaultDuration
).observes('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun')
复选框很简单:
<div>{{input checked=thu type="checkbox" disabled=recurrenceNotEnabled }} Thu</div>
此代码的JsBin位于:
答案 0 :(得分:0)
听起来您想在路线转换时重置属性。
检查Route上的resetController方法。
http://emberjs.com/api/classes/Ember.Route.html#method_resetController
然后,您可以从resetController方法内部将控制器的EventId属性重置为undefined。看起来它会做你需要的。
答案 1 :(得分:0)