2012-09-21 26 views
0

我正在玩一個Ember-data支持的Ember應用程序。領域語言是有點特定的,所以我將使用術語畫廊和圖像的模型。這兩個相關聯:圖庫有很多圖像。如何索引路由到「默認」關聯記錄?

當我路由到一個圖庫時,出口填充了galleryView,它將所有圖像渲染爲縮略圖。它還有一個出口,其中「選定」圖像顯示爲全尺寸。這很適合使用嵌套路由。

對我來說,關鍵是我希望圖庫的索引路線默認顯示圖庫中的第一幅圖像。我發現這實施起來有點棘手。

在路由時候Gallery可能還沒有從後端獲取。這對於圖庫本身沒有任何問題,但是我還沒有設法引用尚未被加載的圖庫。

connectOutlets: function(router) { 
     var controller = router.get('galleryController'); 
     var context = controller.get('defaultImage'); 
     controller.connectOutlet('image', context); 
    } 

defaultImage是我一直在試圖引用圖片我還不知道的ID或有一個真正的參考。到目前爲止,我還沒有能夠返回某種形式的數據,以便在數據加載時真正更新視圖。

我會讓自己感到難堪,並展示這種方法...即使它現在不能正常工作。

defaultImage: Ember.computed(function() { 
    var image = Ember.Object.create({ 
    isLoaded: false 
    }); 
    if (this.get('content.isLoaded')) { 
    var images = this.get('content.images'); 
    image = images.objectAt(0); 
    } 
    return image; 
}).property('content.isLoaded') 

因此,它是聽GalleryController的內容,並試圖在結果中返回一個空對象或所謂的「第一」形象。

我應該甚至可能甚至不嘗試任何事情,甚至在畫廊加載後觸發一個轉換?如果是這樣,我喜歡暗示哪裏能夠「安全地」觸發該過渡。它應該只在圖庫索引狀態達到時觸發,而不是每次加載圖庫時都觸發。

我會停止漫步現在。請讓我澄清我的問題的任何部分,我會更新它。

回答

2

假設您有一個GalleryController和一個SelectedImageController,您可以使用connectControllers連接這兩個。喜歡的東西:

App.GalleryController = Ember.ArrayController.extend({ 
    content: [], 
    selectedImage: null 
    // other stuff 
}); 

App.ImageController = Ember.Controller.extend({ 
    contentBinding: 'galleryController.selectedImage', 
    galleryController: null, 
    // other stuff 
}); 

然後在connectOutlets:

connectOutlets: function(router) { 
    //your other outlets, data fetching etc 
    router.get('imageController').connectControllers('gallery'); 
} 

現在,由於兩個控制器綁定,你只需要在App.GalleryController.selectedImage屬性設置爲第一個項目在列表中。這可以在App.GalleryController.content更新時完成。

+0

謝謝你。這按預期工作,看起來很乾淨。 –

+0

澄清。我最終做的是將ImageController繼承到DefaultImageController ...作爲索引操作的特例。只要用戶選擇另一個圖像,我就可以使用普通的ImageController ...來獲取URL以顯示圖像ID路徑片段,從而轉變爲「圖像」路徑(圖庫,圖庫/索引的同級)的子路徑。 –