5

İstemci tarafında Javascript MVC, ilk ember.js uygulamasında yeniyim.Rails3 iç içe geçmiş kaynakları ile çalışmak için ember-rest denetleyicilerini nasıl kullanıyorsunuz?

İç içe geçmiş modellerden oluşan bir yorum türü oluşturmada ember-rest'ı kullanmak için buradaki yönergeleri izleyin.

http://www.cerebris.com/blog/2012/01/26/beginning-ember-js-on-rails-part-2/

ben aşağıdaki gibi iç içe kaynakları yazmaya başladı:

resources :conversations do 
    resources :comments 
    end 

Şimdi sorun ben kor-dinlenme denetleyici yazmak zorunda:

App.commentsController = Ember.ResourceController .create ({ resourceType: App.Comment resourceURL: '/ conversations /: id/yorumlar' });

Bence şunu kullanabilirim: id ortada; bu konuda nasıl çalışabilirim? Ember-data bunu çözüyor mu? Görünüşe göre, spine.js entegrasyonu bunun üstesinden gelmek için biraz daha kolay olacaktır. Şimdiden teşekkürler!

cevap

6

Dünkü yazıya yaptığınız yorumu yanıtlamak istedim, bu yüzden soruyu buraya sorduğunuz için memnun oldum.

jQuery.ajax üzerinde çok ince bir katman olarak yazdım. Çok gelişmiş değil ve dernekler için yerleşik bir tesis bile yok. Bununla birlikte, şu anda bu lib'in adil bir kullanım alanı sağladığını düşünüyorum. Aşağıdaki koddan göreceğiniz gibi, bu kavram ele alınabilir, ancak daha iyi lib'de soyutlanmalıdır.

Dernekler, her üst kaynakta bir kaynak denetleyicisi örneği oluşturarak işlenebilir. Her belirli kaynak denetleyicisi, belirli bir kaynak dizisini yönetmeli, ancak belirli bir türdeki tüm kaynakları zorunlu olarak değil.

Senin durumunda

, sen görüşmeler için yorumları yönetmek için ResourceController genişletmek olabilir: Bu durumda, her bir konuşma için ConversationComments bir örneğini yapılandırabilirsiniz

App.ConversationComments = Ember.ResourceController.extend({ 
    resourceType: App.Comment, 

    // override _resourceUrl() to base the url on the conversation 
    _resourceUrl: function() { 
     return this.get("conversation")._resourceUrl() + "/comments"; 
    } 
    }); 

:

App.Conversation = Ember.Resource.extend({ 
    resourceUrl:  '/conversations', 
    resourceName:  'conversation', 
    resourceProperties: ['prop1', 'prop2'] 

    // init comments 
    init: function() { 
     this.set("comments", App.ConversationComments.create({ conversation: this })); 
    } 
    }); 

Son olarak, sizi 'her konuşma için bir yorum almak gereklidir:

conversation.get("comments").findAll(); 

Json'daki tüm yorumlara sahipseniz, alternatif olarak loadAll() kullanabilirsiniz. Nerede ve ne zaman loadAll() veya findAll() çağırırsanız uygulamanızın ihtiyaçlarına bağlıdır. Açıkçası, en iyi performans için ajax çağrılarının sayısını azaltmak isteyeceksiniz.

Ember verileri, ember-istirahattan çok daha iddialı bir projedir ve halihazırda derneklerin yanı sıra işlemler gibi gelişmiş özellikleri de destekler. Bununla birlikte, değişen bir API ile çok aktif bir gelişim içinde. Eğer sabırlıysanız ve kodu kazmaya istekli iseniz, bunu denemenizi tavsiye ederim. Toz biraz yerleştiğinde, bununla ilgili blog yazmayı da planlıyorum.

+0

Detaylı yanıtınız için çok teşekkürler. Ember verilerini kullanmak için ne kadar değişiklik yapmam gerektiğini görmeye çalışıyorum. Hala düşünüyor. –

+0

Yaklaşımınızı uygulamaya başladım ve yorumu söyleyen edit.js'nin PUT veya submit işlevi gibi görünüyor.saveResource() hala "/ conversations /: conversation_id/comments /: id" yerine "/ comments" yoluna jsonu PUT'den dolayı başarısız olur. Düzenlemek için blog postanızda önerdiğiniz gibi kopyaları nasıl oluşturabilirim? –

+0

Sorunun cevabını kendim kaldırdım "kaynakları: yorumlar" ve yalnızca nest.rb içinde iç içe geçmiş kaynakları yapılandırmasını tuttu –

İlgili konular