我已经设置了一个ember复选框:
{{view Ember.CheckBox checkedBinding='isChecked'}}
此复选框与此控制器绑定:
App.SettingsController = Ember.Controller.extend({ isChecked: false,isItChecked: function(){ var me = this; $.getJSON('ajax/checkIfUseLowRes.PHP',function(data){ //console.log(data); //me.isChecked = data; me.set('isChecked',data); //console.log(me.isChecked); }) },sendSetting: function(){ var isChecked = this.isChecked; //this.set('isChecked',!isChecked); console.log(isChecked); $.post('ajax/setLowRes.PHP',{useLowRes: isChecked}); App.nameSpace.set('needsRefresh',true); }.observes('isChecked') });
本质上它是一个发送设置的复选框,我的问题是设置复选框的原始状态.当我加载路由时,我想要运行isItChecked()来设置复选框的原始状态.
例:
我进入设置,点击复选框
2.我离开网站,回到设置页面
这里是我想要的isItChecked()函数运行来查询服务器,看看设置是否设置
如果设置,get请求返回true,我想要复选框被检查,因此将me.isChecked设置为data(true)
截至目前,我无法弄清楚如何做到这一点,任何人都可以帮助我吗?
我已经尝试在我的App.SettingsRoute的模型中设置它,但这似乎无法在我的控制器中运行该功能.
谢谢.
解决方法
实现此操作的一种方法是使用路由的setupController方法.
App.SettingsRoute = Ember.Route.extend({ setupController: function(controller,model) { $.getJSON('ajax/checkIfUseLowRes.PHP',function(data){ console.log('setting isChecked to: ',data); controller.set('isChecked',data); }) } })
这样就可以完成对现有代码的最少更改,但确实有一些缺点,而不是完全是这样的.可能会有一个代表您的设置的模型对象更为有意义,将ajax代码移动到该模型对象,并根据需要使用路由的模型钩子进行触发.参见ember-without-ember-data,了解如何工作的一个例子.