kullanarak model türüne/nesne değerine göre görünüm şablonunu seçin Aynı denetleyici içerik dizisinde farklı nesneleri depolamak ve her birini uygun bir görünüm şablonu kullanarak, ancak ideal olarak aynı görünümü kullanarak oluşturmak istiyorum.Ember.js
Aşağıdaki nesneleri kullanarak liste nesneleri çıkarıyorum. Şu anda aynılar ama farklı olanları kullanmak istiyorum.
<script type="text/x-handlebars">
{{#each App.simpleRowController}}
{{view App.SimpleRowView class="simple-row" contentBinding="this"}}
{{/each}}
</script>
Görünümün kesilmiş bir sürümü aşağıdadır. Dahil etmediğim diğer işlevler, modelden bağımsız olarak herhangi bir nesneden kullanılabilir. Bu yüzden ideal olarak tek bir görüşüm var (her ne kadar yardımcı olabileceğine dair yardımcı olabilecek mikroplar hakkında bazı makaleler okudum). izin veren farklı nesne tipe
<script>
App.SimpleRowView = Em.View.extend({
templateName: 'simple-row-preview',
});
</script>
Benim ilk birkaç testler 'basit sıralı-önizleme' içindeki koşulların yükleri ile sona erdi - bu korkunç görünüyordu!
Şablon dizimi veya içerik dizilimin üzerinde yinelenirken kullanılan görünümü dinamik olarak kontrol etmenin herhangi bir yolu var mı?
GÜNCELLEME
sayesinde iki katılımcılara çok. Görünümde kullanılan son kod aşağıdadır. Modellerimden bazıları benzerdir ve uygulamamda şablon (veya bir çeşit 'durum') arasında geçiş yapabilmeyi tercih ettim.
<script>
App.SimpleRowView = Em.View.extend({
templateName: function() {
return Em.getPath(this, 'content.template');
}.property('content.template').cacheable(),
_templateChanged: function() {
this.rerender();
}.observes('templateName'),
// etc.
});
</script>
görünce şablonu değiştirmek için işlevler ekledik, Bu, görünümün bir gidon yardımcı yardımı ile eklenmediği, ancak, otom tarafından otomajik olarak alınan bir sınıf olarak durumdur. Bu durumda, 'içeriğe' veya 'denetleyiciye' erişemezsiniz (burada tartışılmıştır: http://stackoverflow.com/questions/15337065/how-to-get-any-controller-instance-from-init- usul-bir görüntüleme). Bu durumda benim çözümüm, “controller.content” i gözlemleyen bir yönteme sahip olmak ve bu işleve göre bu işlevi buna göre ayarlamak: this.set ('currentView', view) ' – vanthome