【发布时间】:2015-03-22 13:06:23
【问题描述】:
我正在尝试构建一系列复选框来检查星期几,但我不知道如何在切换路线时保持正确的演示状态。
由于它保持以前的状态(控制器是单例的),我无法弄清楚每次转换以及尝试创建新事件实例时重新初始化它的最佳方法是什么。
设置如下(coffeescript notation):
这样定义的数组控制器:
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在:
【问题讨论】:
标签: javascript ember.js coffeescript