Javascript 当route加载到控制复选框的set属性时运行ember控制器函数

Javascript 当route加载到控制复选框的set属性时运行ember控制器函数,javascript,checkbox,ember.js,Javascript,Checkbox,Ember.js,我已设置了一个余烬复选框: {{view Ember.Checkbox checkedBinding='isChecked'}} 此复选框已绑定到此控制器: App.SettingsController = Ember.Controller.extend({ isChecked: false, isItChecked: function(){ var me = this; $.getJSON('ajax/checkIfUseLowRes.php', function(dat

我已设置了一个余烬复选框:

{{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')


});
本质上,它是一个复选框,张贴一个设置,我的问题是设置复选框的原始状态。加载路由时,我希望运行
isitched()
以设置复选框的原始状态

例如: 1.我进入设置,单击复选框 2.我离开网站,回到设置页面 这里是我希望运行
isItChecked()
函数来查询服务器并查看设置是否已设置的位置

如果设置了,get请求将返回true,我希望选中复选框,因此将me.isChecked设置为data(true)

现在我还不知道怎么做,有人能帮我吗

我尝试在我的
应用程序中设置它。SettingsRoute
的模型中,但似乎无法在我的控制器中运行该功能

谢谢


JSBin:

实现这一点的一种方法是使用路由的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);
    })
  }
})

这应该在对现有代码进行最少更改的情况下完成这项工作,但确实有一些缺点,而且不完全是ember方式。如果有一个表示您的设置的模型对象,将ajax代码移动到该模型对象,并根据需要使用路由的模型钩子来触发,可能会更有意义。有关如何工作的示例,请参见。

正如Mike所说,您可以使用“setupController”,也可以使用此选项:

App.SettingsRoute = Ember.Route.extend({
  activate: function() {
    this.controllerFor('settings').isItChecked();
  }
})

你能不能不用init函数?e、 g

App.IndexController = Ember.ObjectController.extend({
    init: function() {
    console.log("function run");
},

它应该不是
this.controllerFor('settings').send('isItChecked')?谢谢!这很有帮助。这只会执行一次,而不是每次显示控制器时。