2013-08-13 7 views
11

mam założyć pole ember:Uruchamianie funkcji kontrolera Ember gdy ładunki trasy, aby ustawić właściwość, która kontroluje pole

{{view Ember.Checkbox checkedBinding='isChecked'}} 

To pole wyboru jest związany z tym sterownikiem:

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


}); 

Zasadniczo to pole wyboru, które publikuje ustawienie, moim problemem jest ustawienie oryginalnego stanu pola wyboru. Kiedy ładuję trasę, chcę uruchomić isItChecked(), aby ustawić oryginalny stan pola wyboru.

Przykład: 1. idę do ustawień, kliknij pole wyboru 2. Zostawiam witrynę i wrócić do strony ustawień Oto gdzie chcę funkcja isItChecked() uruchomić kwerendy serwer i sprawdzić, czy ustawienie jest ustawiony

Jeśli jest ustawiona, żądania get zwraca true, chcę to pole wyboru, należy sprawdzić, stąd ustawienie me.isChecked danych (true)

od teraz nie mogę zrozumieć jak to zrobić, czy ktoś może mi pomóc?

Próbowałem ustawić go w moim modelu App.SettingsRoute, ale to wydaje się nie być w stanie uruchomić funkcję w moim kontrolerze.

Dzięki.

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

Odpowiedz

8

Jednym ze sposobów osiągnięcia tego celu jest za pomocą metody setupController Trasa jest.

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); 
    }) 
    } 
}) 

ten powinien otrzymać pracę z najmniejszą liczbą zmian do istniejącego kodu, ale ma pewne wady i nie jest dokładnie the-Ember-way. Prawdopodobnie bardziej sensownym byłoby posiadanie obiektu modelu, który reprezentuje twoje ustawienia, przeniesienie kodu ajax do tego obiektu modelu i użycie haka modelu trasy do aktywacji w razie potrzeby. Zobacz ember-without-ember-data, aby dowiedzieć się, jak to działa.

+0

Dziękujemy! to bardzo pomogło. – MoDFoX

6

jak Mike mówi, można użyć „setupController” lub można również użyć tego:

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

nie powinno to być raczej 'this.controllerFor ('settings'). Send ('isItChecked');'? – intuitivepixel

0

Nie można po prostu użyć funkcji init? na przykład

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

Zostanie to wykonane tylko raz, nie za każdym razem, gdy kontroler zostanie wyświetlony. – bouke

Powiązane problemy