2014-10-17 82 views
0

比方說,這是我的路由器設置 -燼數據:繼承親子資源

router.js:

App.Router.map(function(){ 
    this.resource('photos', function(){ 
     this.resource('photo', {path: '/:photo_id'}, function(){ 
      //this.route('edit'); 
     }); 
    }); 
    }); 

photo.js:

App.Photo = DS.Model.extend({ 
path: DS.attr('string'), 
resolution: DS.attr('string'), 
author: DS.belongsTo('user'), 
dateTaken: DS.attr('date'), 
aperture: DS.attr('string'), 
focalLength: DS.attr('string'), 
      . 
      . 
      . 
exposure: DS.attr('string') 

}); 

photosRoute.js :

App.PhotosRoute = Ember.Route.extend({ 
    model: function(){ 
     return this.store.find('photo'); 
    } 
}); 

photos.hbs:

<div class="container"> 
    <div class="row"> 
     {{#each photo in controller}} 
      <div class="col-md-4"> 
       {{#link-to 'photo' photo}}{{photo.path}}{{/link-to}} <br /> 
       By: {{photo.author}} <br /> 

      </div> 
     {{/each}} 
    </div> 
</div> 

{{outlet}} 

如上所示,我只在photos.hbs模板中使用{{photo.path}}和{{photo.author}}來顯示所有照片的列表。但是,在這個設置中,調用/#/ photos會從我的django REST服務器獲取每張照片的所有字段 - 我不感興趣。有沒有辦法從/#/照片和完整的照片模型,只有當我點擊單張照片/#/照片/ photo_id只從照片模型的幾個領域取得的方法

我有一個嘗試過幾件事:

  1. 創建了一個名爲'photoDetail'的新子級資源,用於擴展原始'photo'。理想情況下,這應該取代單一的'照片'。
  2. 從我收集的{async:true}屬性僅適用於在它們之間建立關係的模型之間進行異步提取 - 但不適用於照片模型中的各個字段,如'exposure','focalLength'。

任何幫助將不勝感激。

回答

0

不,在Ember-Data中沒有部分加載的模型。 (事實上​​,我認爲任何大型的Ember-Data替代品都沒有這個功能)。大多數情況下,您的模型應該足夠小,以便加載所有記錄並不重要。當您啓用GZIP時,您甚至可能不會注意到其中的差異。如果你有一個帶寬非常有限的特殊用例,你可能只想編寫自己的持久性庫。 (你也許也可以修改Ember-Data或者濫用它的一些功能來完成相同的任務,但我建議不要這樣做。)

+0

謝謝你的回覆@GJK。好吧,所以從你的建議 - 我需要我的模型足夠小。下面的工作也是如此:將'照片'和'photoDetails'作爲兩個獨立的並行/同級資源,並在它們之間建立一對一的關係 - – 2014-10-17 20:29:19

+0

另外一個簡單的問題:如果'photo'和'photoDetail'模型有一個他們之間的一對一關係,他們會天生具有相同的ID?如果不是如何將2個模型與ID相連接? – 2014-10-17 20:33:49

+0

是的,只要它們以某種方式鏈接(就像一對一的關係),有兩個獨立的模型就可以工作。另外,我認爲Ember-Data允許這些ID是相同的,只要它們是不同類型的(我認爲)。 – GJK 2014-10-17 21:57:59