2016-04-04 19 views
0

Ember 2.0 kullanarak ilişki verilerini yükleme konusunda sorun yaşıyorum. Aşağıdaki iki model, Proje Verilen ve SatırÖğesi, ben belirli bir projeye ait olan tüm satır öğelerini listelemek için çalışıyorum: my rota İçindeBağlantı verilerini kullanarak yükleme Ember 2

export default DS.Model.extend({ 
    name: DS.attr(), 
    organisation: DS.attr(), 
    customer: DS.attr(), 
    hours: DS.attr({defaultValue: 0}), 
    line_items: DS.hasMany('line-item', {async: true}) 
}); 

export default DS.Model.extend({ 
    name: DS.attr(), 
    value: DS.attr({defaultValue: 1}), 
    quantity: DS.attr({defaultValue: 1}), 
    state: DS.attr({defaultValue: 'OPEN'}), 
    project: DS.belongsTo('project') 
}); 

, ben sorunsuz verilen bir projeyi yüklemek:

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    model(params) { 
     return this.store.findRecord('project', params.project_id); 
    } 
}); 

Bileşenimin içinde satır öğelerimi şu şekilde yüklemeyi deniyorum:

import ember from 'ember'; Ben ancak şablonumun içinde benim satır öğelerini üzerinde yineleme çalıştığınızda

export default Ember.Component.extend({ 
    store: Ember.inject.service(), 
    lineItems: function() { 
     return this.get('project').get('line_items').toArray(); 
    }.property('project.line_items'), 
}); 

, hiçbir şey olmaz: Hayır şans ya {{#each project.line_items as |item|}} kullanarak

{{#each lineItems as |item|}} 
    <tr> 
    <td> 
     <a href="#">{{item.name}}</a> 
    </td> 
    </tr> 
{{/each}} 

. this.get('project').get('line_items').toArray() çıktısının yazdırılması boş bir liste gösterir.

projemin satır öğeleri içeriyor Ancak, beklendiği gibi:

{ 
    "data":{ 
     "type":"projects", 
     "id":"7d93633d-a264-4cb3-918c-82cc44cb76e2", 
     "attributes":{ 
     "created":"2016-04-04T19:02:03.113408Z", 
     "modified":"2016-04-04T19:02:03.113511Z", 
     "name":"Sample name", 
     "hours":0 
     }, 
     "relationships":{ 
     "line_items":{ 
      "meta":{ 
       "count":1 
      }, 
      "data":[ 
       { 
        "type":"LineItem", 
        "id":"01915d73-fde5-4b6f-8915-174c16592942" 
       } 
      ] 
     } 
     } 
    } 
} 

... benim satır öğesi: rotanız içinde Yük projesi olarak:

 { 
      "type": "line-items", 
      "id": "01915d73-fde5-4b6f-8915-174c16592942", 
      "attributes": { 
       "created": "2016-04-04T19:02:15.622483Z", 
       "modified": "2016-04-04T19:02:15.622534Z", 
       "name": "Test Line Item", 
       "value": 1, 
       "quantity": 1 
      }, 
      "relationships": { 
       "project": { 
        "data": { 
         "type": "projects", 
         "id": "7d93633d-a264-4cb3-918c-82cc44cb76e2" 
        } 
       } 
      } 
     } 
+1

Kodunuzu test ettim ve işe yaramıyor. Her zaman modeli "öğe" ve "öğeler" olarak yeniden adlandırırsam çalışır. Bana öyle geliyor ki, Ember Data birleştirilmiş model isimlerini beğenmiyor ... – Zoltan

+0

Teşekkürler Zoltan! 'Satır-öğe' model ismi yerine 'item' denilmeli mi? – JB2

+1

Zoltan buydu. Teşekkürler - bu çözüldü! – JB2

cevap

1

Kodunuzu test ettim ve işe yaramıyor. Her zaman modeli "öğe" ve "öğeler" olarak yeniden adlandırırsam çalışır. Görünüşe göre, bu Ember Data birleştirilmiş model isimlerini beğenmiyor ...

Sonuç olarak, her yerde basit bir ad kullanmalıyız ya da tam bir sözdizimini bulmalıyız ... camelCase, tire- erized veya under_scored?

+1

Görünüşe göre '_', Ember tarafından "-" ye dönüştürülür. Bu nedenle, güncelleme alanları otomatik olarak alan adının dasherized eşdeğerine dönüştürülmesine yol açar. Hangi her türlü karışıklık ile sonuçlanır. Anahtar, camelCase kullanmaktır :) Tekrar teşekkürler! – JB2

0

ben aşağıdakileri yapmak öneririm şimdi yap. Proje örneğini, mağaza örneği enjekte etmek yerine bileşene geçirin. Her şey yolunda giderse

// template which gets rendered by your component as the project instance is present 
{{#if project.line_items}} {{!-- #if project.lineItems --}} 
    {{!-- iterate over line items and print their names --}} 
    <ul> 
    {{#each project.line_items as |item|}} 
    <li>Line item name: {{item.name}}</li> 
    {{/each}} 
    </ul> 
{{/if}} 
... 

, bu çalışması gerekir: En bileşen şablonun zaman uyumsuz yüklü ilişkileri yüklenir ve daha sonra uygun bölümü göstermek edilip edilmediğini kontrol edebilirsiniz yılında

// template which gets rendered after model() hook 
... 
{{#if model}} 
    {{!-- pass the model into your component as 'project' --}} 
    {{your-component project=model}} 
{{/if}} 
... 

. Bileşeninizin enjekte edilmek üzere depolanması veya project.line_items'deki herhangi bir hesaplanmış özelliğe ihtiyacı yoktur.

+0

Teşekkürler Pavol. Korkarım ki zaten yaptığım şey (yani proje örneğini bileşenine geçirerek :) - beklendiği gibi çalışan, satır öğesi içermediği göz önüne alındığında). – JB2

İlgili konular