2014-05-13 2 views
1

Я перенаправил с другого контроллера действия на один контроллер. this.get('controllers.searchResult').send('searchDoc', query);Установить модель из шаблона действия и перезагрузки в ember js

Здесь я получаю массив объектов с использованием AJAX запрос

App.SearchResultController = Ember.ArrayController.extend({ 

serverURL: 'someURL', 

actions: { 
    searchDoc: function(query) { 

     $.ajax({ 
      type: "GET", 
      url: serverURL + request, 
      data : 'q=' + query, 
      dataType : "JSON", 
      context : this, // to increase the scope of 
      statusCode : { 
       200 : function(response) { 

        var docs = []; 
        response.docs.forEach(function(doc) { 
         docs.push(App.Doc.create(doc)); 
        }); 

        // do something here so that 
        // docs get save in the model 
        // and result page get reload 
       }, 
       400 : function() { 
        console.log('status 400 something went wrong'); 
       } 
      } 
     }); 
    } 
} 
}); 

Я новый для Ember JS. Я хочу сохранить/сохранить/добавить этот объект docs в модель и перезагрузить мой маршрут searchResult.

ответ

2

Вы должны оставить ссылку на контроллер и использовать его для установки content, когда вы вернете результаты.

Пример:

App.SearchResultController = Ember.ArrayController.extend({ 
serverURL: 'someURL', 

actions: { 
    searchDoc: function(query) { 
     var self = this; // keep a reference to the controller 

     $.ajax({ 
      type: "GET", 
      url: serverURL + request, 
      data : 'q=' + query, 
      dataType : "JSON", 
      statusCode : { 
       200 : function(response) { 

        var docs = Ember.A(); 
        response.docs.forEach(function(doc) { 
         docs.pushObject(App.Doc.create(doc)); 
        }); 

        self.set('content', docs); // use the controller reference to set the content 
       }, 
       400 : function() { 
        console.log('status 400 something went wrong'); 
       } 
      } 
     }); 
    } 
} 
}); 

Я также добавил использование массива Тлеющей в примере. Установка content должна инициировать обновление вашего представления.

Вы можете перейти к SEARCHRESULT, используя следующие:

this.get('controllers.searchResult').send('searchDoc', query); 
this.transitionToRoute('searchResult'); 
+0

спасибо за ответ. Я использовал это уже, но не с 'self'. Несмотря на это, я должен использовать 'self.set ('content', response.docs);' вместо команды выше, чтобы заставить ее работать. –

Смежные вопросы