Запуск функции контроллера ember при загрузке маршрута для установки свойства, которое управляет флажком

Я установил флажок 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(), чтобы установить исходное состояние флажка.

Пример: 1. Я захожу в настройки, устанавливаю флажок 2. Я покидаю сайт и возвращаюсь на страницу настроек Здесь я хочу, чтобы функция isItChecked() выполняла запрос к серверу и проверяла, установлены ли настройки

Если он установлен, запрос на получение возвращает true, я хочу, чтобы флажок был установлен, поэтому я устанавливаю me.isChecked в данные (true)

на данный момент я не могу понять, как это сделать, может ли кто-нибудь мне помочь?

Я попытался установить его в моей модели App.SettingsRoute, но похоже, что это не может запустить функцию в моем контроллере.

Спасибо.

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


person MoDFoX    schedule 13.08.2013    source источник


Ответы (3)


Один из способов добиться этого — использовать метод 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 пример того, как это может работать.

person Mike Grassotti    schedule 13.08.2013
comment
Спасибо! это очень помогло. - person MoDFoX; 13.08.2013

как говорит Майк, вы можете использовать «setupController» или вы также можете использовать это:

App.SettingsRoute = Ember.Route.extend({
  activate: function() {
    this.controllerFor('settings').isItChecked();
  }
})
person fanta    schedule 13.08.2013
comment
не должно ли быть скорее this.controllerFor('settings').send('isItChecked');? - person intuitivepixel; 13.08.2013

Не могли бы вы просто использовать функцию инициализации? например

App.IndexController = Ember.ObjectController.extend({
    init: function() {
    console.log("function run");
},
person Jon    schedule 23.12.2014
comment
Это будет выполняться только один раз, а не каждый раз, когда отображается контроллер. - person Bouke; 22.04.2015