在路线转换后重新初始化物料控制器
Reinitalize item-controller after route transition
我试图建立一系列复选框来检查一周中的哪几天,但我不知道如何在切换路由时保持正确的呈现状态。
由于它保持了以前的状态(控制器是单例的),我不知道每次转换时以及尝试创建新的事件实例时重新初始化它的最佳方法是什么。
设置如下(咖啡脚本符号):
一种定义如下的阵列控制器:
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位于:
http://emberjs.jsbin.com/boweze/2/edit
听起来你想在从路由转换时重置属性。
查看Route上的resetController方法。
http://emberjs.com/api/classes/Ember.Route.html#method_resetController
然后,您可以从resetController方法内部将控制器的EventId属性重置为undefined。看起来它可以满足你的需要。
您可以将.on('init')与观察程序一起使用,以便在初始化时激发代码。
更新JsBin:
http://emberjs.jsbin.com/boweze/4/edit
相关文章:
- 尝试初始化()Spine's控制器和故障
- Angular.js延迟控制器初始化
- Angular JS控制器初始化错误
- 在路线转换后重新初始化物料控制器
- 通过因果报应测试管理angularjs控制器初始化
- 每次属性更改时,角度控制器都会初始化
- 角度测试:监视在控制器初始化时执行的函数
- AngularJS在初始化仪表板控制器之前使用$htttp获取仪表板设置
- 列表在控制器中初始化
- 更改包含的页面和URL,而无需在AngularJS中重新初始化控制器
- Angularjs 控制器初始化
- 角度.js:在异步加载的模板上初始化控制器
- 在 AngularJS 中实例化和初始化控制器
- 通过 ajax 请求初始化控制器
- AngularJS:初始化控制器时运行代码
- 用几个ajax请求初始化控制器的最佳方式
- 角度:在初始化控制器之前重新加载$rootscope用户
- 在用karma测试angularjs时初始化控制器错误
- AngularJS:如何从$routeProvider初始化控制器
- 如何在angularJS中初始化控制器$scope变量