2014-12-23 32 views
0

我做了一個簡單的應用程序,我一次又一次地做了相同的ajax調用(與setInterval),它不是由用戶移動到一個路線,而是觸發而是通過單擊觸發setInterval啓動的按鈕。因此,我並沒有通過移入路由觸發的model鉤子獲取數據,因爲該鉤子只被調用一次,然後模板會自動呈現。相反,我在控制器中有一個jsonRequest函數,它由startInterval函數一遍又一遍地調用。因此,模板中的數據不會像model鉤子那樣自動呈現。因此,一旦我的數據在每個ajax請求之後返回,我希望將其附加到列表中,或者以某種方式將其添加到index.html,但是我找不到使用Ember的API執行此操作的方法。請求返回後,如何將數據添加到index.html(我不想將它稱爲view,因爲我還沒有創建view)?從ajax請求渲染數據不是在模型功能

App.IndexController = Ember.Controller.extend({ 

     jsonRequest: function(){ 
     var datasource = 'http://localhost:8080'; 
     return new Ember.$.ajax({url: App.Index.url, dataType: "json", type: 'GET'}).then(function(data){ 
       console.log(data)  

     }) 
     }, 
    startInterval: function(){ 
      console.log("startInterval"); 
     App.Index.setIntervalId = setInterval(this.jsonRequest, (1000)); 
    } 


    App.Index = Ember.Object.extend({ 
    url: "", 
    setIntervalId: "", 

    }); 

    App.IndexRoute = Ember.Route.extend({ 

    model: function(){ 
     return App.Index.create(); 
    }, 

這裏有一個jsbin顯示,被拋出的錯誤,當我嘗試從Ajax調用的數據添加到索引控制器上的對象屬性(由SO用戶巴克的建議)。該bin不顯示嘗試在模板中循環穿過objects,因爲我們從未得到過這麼遠http://emberjs.jsbin.com/bomilowiha/1/edit?html,css,js,console,output

回答

0

您可以將收到的數據轉換爲Ember.Object並將其添加到控制器屬性中。

樣品控制器代碼:

Ember.Controller.extend({ 
    objects: [], 
    jsonRequest: function() { 
    Ember.$.ajax({/* your request */}).then(function(data) { 
     var object = /* code to turn the data into an object for display */; 
     this.get('objects').pushObject(object); 
    }.bind(this)); 
    } 
}); 

然後在你的模板,你可以遍歷模型排列:

{{#each object in objects}} 
    display object properties here 
{{/each}} 

如何打開JSON爲對象進行顯示的細節,以及如何顯示對象,都取決於您的需求。

+0

這裏的問題是,我沒有積累對象,然後一次渲染它們(比如,通過迭代對象循環)。相反,一旦每個對象都返回,我希望渲染它,然後對下一個對象執行相同操作,所以使模型數組看起來不正確。我誤解了你的答案嗎?或者你能建議一些不同的東西? – Leahcim

+0

也許更重要的是,當我移動到App.IndexRoute = Ember.Route.extend({model:function(){返回App.Index.create(); })路線時,我已經創建了模型。 '並且該模型不是數組,而是您在OP底部看到的App.Index – Leahcim

+0

如果向數組添加新對象,它將自動呈現。模型是否具有任何功能?您在該模型的帖子中放置的代碼似乎沒有任何作用 –