11

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

{{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()运行以设置复选框的原始状态。

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

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

截至目前我无法弄清楚如何做到这一点,有人可以帮助我吗?

我已经尝试在我App.SettingsRoute的模型中设置它,但这似乎无法在我的控制器中运行该功能。

谢谢。

JSBin:http: //jsbin.com/ukuwiq/1/edit

4

3 回答 3

8

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

这应该可以通过对现有代码的最少更改来完成工作,但确实有一些缺点,并且不完全是the-ember-way。拥有一个代表您的设置的模型对象可能更有意义,将 ajax 代码移动到该模型对象并根据需要使用路由的模型挂钩来触发。有关如何工作的示例,请参阅ember-without-ember-data 。

于 2013-08-13T01:41:53.803 回答
6

正如迈克所说,您可以使用“setupController”,也可以使用它:

App.SettingsRoute = Ember.Route.extend({
  activate: function() {
    this.controllerFor('settings').isItChecked();
  }
})
于 2013-08-13T03:24:03.630 回答
0

你不能只使用init函数吗?例如

App.IndexController = Ember.ObjectController.extend({
    init: function() {
    console.log("function run");
},
于 2014-12-23T16:05:30.077 回答