2012-10-22 29 views
1

我只是Ember的新手,確定這是一個簡單的問題,但無法弄清楚實現我想要的最佳方式。 場景如下:執行應用程序,並Router出口video_overviewApp.Featured.find()檢索到的內容連接,我可以看到在瀏覽器記錄,但值的響應從未因此,當Ember初學者:使用ajax的路由器和插座

App.Router = Ember.Router.extend({ 
root: Ember.Route.extend({ 
    home: Ember.Route.extend({ 
     route: '/', 
     connectOutlets: function(router) { 
      router.get('applicationController').connectOutlet('home'); 
      router.get('homeController').connectOutlet('menu', 'menu', App.Channels.find()); 
      router.get('homeController').connectOutlet('video_overview', 'videoOverview', App.Featured.find()); 
     } 
    }) 
}) 

App.Featured = Ember.Object.extend(); 

App.Featured.reopenClass({ 
find: function() { 
    setRequestUrl('featured'); 
    establishSecureConnection(); 
    $.ajaxQueue({ 
     type: "GET", 
     url: connect.url, 
     data: "", 
     dataType: 'jsonp', 
     jsonp: false, 
     jsonpCallback: "fjsonp", 
     cache: true, 
     context: this, 
     success: function(response){ 
      this.findOne(response[0].mediaId); // get the first featured object and retrieve details 
      // 
      console.log('Featured Video:'); 
      console.log(response); 
     } 
    }); 
}, 
findOne: function(item) { 
    var featuredVideo = App.Featured.create({}); 
    setRequestUrl('media/'+item); 
    establishSecureConnection(); 
    $.ajaxQueue({ 
     type: "GET", 
     url: connect.url, 
     data: "", 
     dataType: 'jsonp', 
     jsonp: false, 
     jsonpCallback: "fjsonp", 
     cache: true, 
     context: featuredVideo, 
     success: function(response){ 
      this.setProperties(response); 
      // 
      console.log('Featured Video details:'); 
      console.log(response); 
     } 
    }); 
    return featuredVideo; 
} 

到達的模板。

我猜與我正在做的App.Featured(先find()然後findOne())有關的'double'請求,所以當我返回返回值featuredVideo沒有被通知。

非常感謝您的時間。

回答

1

App.Featured.find似乎返回任何東西。我認爲你必須返回findOne的結果,是嗎?

+0

是的你是對的,但我已經嘗試過,似乎是一樣的。 我試圖在findOne成功函數中返回結果,希望能夠通過查找來更新模板。 你將如何返回值? – adriagil

1

Hy大家再次, 最後我搞亂了,並採取sly7_7建議,並得到了工作!

這是我實現的方式,但如果任何人能詳細解釋Ember的行爲將不勝感激。

App.Featured = Ember.Object.extend(); 
App.Featured.reopenClass({ 
find: function(singleItem) { 
    if (singleItem){ 
     console.log('Returning the single item...'); 
     console.log(singleItem); 
     // 
     featuredContent.setProperties(singleItem); 
    } else { 
     setRequestUrl('featured'); 
     establishSecureConnection(); 
     $.ajaxQueue({ 
      type: "GET", 
      url: connect.url, 
      data: "", 
      dataType: 'jsonp', 
      jsonp: false, 
      jsonpCallback: "fjsonp", 
      cache: true, 
      context: featuredContent, 
      success: function(response){ 
       this.setProperties(App.Featured.findOne(response[0].mediaId)); // this.setProperties({'category':'hey arrives here success'}); 
       // 
       console.log('Featured Video:'); 
       console.log(response); 
      } 
     }); 
    } 
    return featuredContent; 
}, 
findOne: function(item) { 
    setRequestUrl('media/'+item); 
    establishSecureConnection(); 
    $.ajaxQueue({ 
     type: "GET", 
     url: connect.url, 
     data: "", 
     dataType: 'jsonp', 
     jsonp: false, 
     jsonpCallback: "fjsonp", 
     cache: true, 
     context: this, 
     success: function(response){ 
      console.log('Featured Video content:'); 
      console.log(response); 
      // 
      this.find(response); 
     } 
    }); 
} 

});

var featuredContent = App.Featured.create({}); 

然後模板接收對featuredContent對象所做的更改。

+0

定義查找方法的原則是立即返回一些東西。因此,創建一個無效的'App.Featured.create({})',然後設置屬性,你已經做到了,我認爲這是一個好方法:)。如果你必須處理更多的後端連接,涉及到關係等......我建議你看一下ember-data。 –

+0

是的!幾天前我遇到了餘燼數據,但不幸的是,我還沒有能夠測試。 再次感謝您的建議;) – adriagil

相關問題