2014-04-01 17 views
7

tôi cần phải hiển thị mục đầu tiên trong một mối quan hệ hasManyHiển thị mục đầu tiên trong mối quan hệ ember hasMany trong tay lái mẫu

Về cơ bản một chủ đề có thể có nhiều hơn 1 tác giả nhưng tôi cần phải hiển thị chỉ là người đầu tiên trong một đặc biệt mẫu

tôi đã các json sau

{ 
    threads: [ 
     { 
      id: 1, 
      authors: [2,3] 
     } 
    ], 
    authors: [ 
     { 
      id: 2, 
      fullname: "foo" 
     }, 
     { 
      id: 3, 
      fullname: "bar" 
     } 
    ]   
} 

Và các mô hình sau

App.Thread = DS.Model.extend({ 
    authors: DS.hasMany('author') 
}); 

App.Author = DS.Model.extend({ 
    fullname: DS.attr('string') 
}); 

bây giờ trong mẫu của tôi tôi đang tring để làm một cái gì đó như {{thread.authors[0].fullname}} nhưng nó không hoạt động. Tôi đã thử cũng thread.authors.0.fullname theo cú pháp tay lái nhưng không có gì thay đổi.

Thnx trước sự giúp đỡ của bạn

Trả lời

18

Sử dụng Ember.Enumerable của firstObject:

{{thread.firstObject.fullName}} 

Nếu bạn đang sử dụng nó trong rất nhiều nơi, hết sức mình để xác định nó như một tài sản tính toán trong mô hình:

App.Thread = DS.Model.extend({ 
    authors: DS.hasMany('author') 

    firstAuthor: Ember.computed.alias('authors.firstObject') 
}); 

và sử dụng nó trong các mẫu của bạn như:

{{firstAuthor.name}} 
+0

Hoàn hảo, cảm ơn! Chỉ vì tò mò, nếu tôi cần thứ hai thì sao? Là có một cách? – Fed03

+0

@ Fed03 Tốt nhất của nó để giữ càng nhiều logic càng tốt (nhận được mục thứ 2, nhận được mục thứ N, ...) ra khỏi mẫu. Để trả lời câu hỏi của bạn, không có cách nào được xác định trước để lấy mục thứ 2. Bạn sẽ phải định nghĩa nó như là một thuộc tính được tính toán trong bộ điều khiển của bạn, và tính toán nó trong đó. –

+1

bạn có thể làm điều này.get ('tác giả'). ObjectAt (n) trong bộ điều khiển của bạn –

Các vấn đề liên quan