2014-05-13 52 views
1

我已經從另一個動作控制器重定向到一個控制器。 this.get('controllers.searchResult').send('searchDoc', query);設置模型從動作和重新加載模板在餘燼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'); 
       } 
      } 
     }); 
    } 
} 
}); 

我新爲灰燼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應該會觸發更新視圖。

您可以使用過渡到信息搜索結果如下:

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

感謝您的回答。我已經在使用它,但不是用'self'。儘管如此,我必須使用'self.set('content',response.docs)''代替上述命令才能使其工作。 –