Выполнение функции контроллера 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()
выполнялась для запроса сервера и выяснения, установлен ли параметр
Если он установлен, запрос get возвращает true, я хочу, чтобы флажок был проверен, следовательно, установка me.isChecked data (true)
как сейчас, я не могу понять, как это сделать, может ли кто-нибудь мне помочь?
Я попытался установить его в моей модели App.SettingsRoute
, но, похоже, он не может запустить функцию в моем контроллере.
Спасибо.
JSBin: http://jsbin.com/ukuwiq/1/edit
Ответы
Ответ 1
Одним из способов достижения этого является использование метода route 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-данных для примера, как это может работать.
Ответ 2
как говорит Майк, вы можете использовать 'setupController', или вы также можете использовать это:
App.SettingsRoute = Ember.Route.extend({
activate: function() {
this.controllerFor('settings').isItChecked();
}
})
Ответ 3
Не могли бы вы использовать функцию init? например.
App.IndexController = Ember.ObjectController.extend({
init: function() {
console.log("function run");
},