Ember'i öğrenmeye başladım ve olayları ele almak için en iyi, en kabul edilebilir ve hatta amaçlanan yöntemin ne olduğu net değil. Tıklama işlevleri etkinlik argümanında hedefi kontrol etmek kabul edilebilir mi, {{action}} dışında bir etkinlik gerektiren her bir öğe için veya tamamen farklı bir şey için yeni bir görünüm oluşturmalı mıyım?Ember.js'de olayları işlemenin en iyi yolu nedir?
cevap
IMO, mümkünse {{action}}
yardımcı programını kullanmalısınız. Şablonda bir etikete etkinlik eklemek istiyorsanız, {{action}}
; gerek yeni görünümü yapmak için:
<a {{action showPosts href=true}}>All Posts</a>
<form {{action validate target="controller"}}>
// ...
</form>
Belirli bir eleman birden fazla olaylarını işlemek istediğinizde yukarıdaki duruma bir istisna oluşturur: ikimiz de mouseEnter
yakalamanız gerekir gibi
// Template
<ul>
{{#each post in controller}}
{{#view App.PostView}}
{{title}}
{{#if view.showDetails}}
<span>{{summary}}</span>
{{/if}}
{{/view}}
{{/each}}
</ul>
// View
App.PostView = Ember.View.extend({
tagName: li,
classNames: ['post-item'],
mouseEnter: function(event) {
this.set('showDetails', true);
},
mouseLeave: function(event) {
this.set('showDetails', false);
}
});
ve mouseLeave
(sırasıyla, gönderinin ayrıntılarını göstermek ve gizlemek için), Şablonda çok fazla mantıktan kaçınarak, Görünümde bunu yapmak daha iyidir. Yukarıdaki alternatif yolu biz idare istediğiniz etkinliklerin sayısı kadar iç içe etiketleri kullanmak olacaktır (bizim durumumuzda, 2):
// Template
<ul>
{{#each post in controller}}
<li class="post-item" {{action showTheDetails post on="mouseEnter" target="controller"}}>
<span class="dummy" {{action hideTheDetails post on="mouseLeave" target="controller"}}
{{title}}
{{#if post.showDetails}}
<span>{{summary}}</span>
{{/if}}
</span<
</li>
{{/each}}
</ul>
Sonra denetleyicisi:
// Controller
App.PostsController = Ember.ArrayController.extend({
showTheDetails: function(event) {
var post = event.context;
post.set('showDetails', true);
},
hideTheDetails: function(event) {
var post = event.context;
post.set('showDetails', false);
}
});
Ama bence bunun daha çirkin olduğunu kabul edeceksiniz. Bkz here. Eğer görünümünde olayları yakalamak için ama çarem yok (vb Ember.TextField, Ember.TextArea,) Kor kontrol görünümleri kullanmak istediğiniz durumlarda
. Yani görünümünde olay işleyicileri denetim görünümünü genişletmek ve tanımlayın:
// Template
<legend>Add a comment</legend>
{{view App.CommentInputField valueBinding="comment"}}
// View
App.CommentInputField = Ember.TextField.extend({
focusOut: function(event) {
this.get('controller').validateComment();
},
keyDown: function(event) {
if (event.keyCode === 13) { // Enter key
this.get('controller').createComment();
return false;
}
}
});
- 1. Python'da HTML işlemenin en iyi yolu nedir?
- 2. C# daki eşzamansız HttpWebRequest istisnalarını işlemenin en iyi yolu nedir?
- 3. CakePHP'de karmaşık veri tiplerini işlemenin en iyi yolu nedir?
- 4. Clojure'deki bu dizi dönüşümü işlemenin en iyi yolu nedir?
- 5. MVC'de tekrarlanan formları işlemenin en iyi yolu nedir?
- 6. Bir resmi clojure'da işlemenin en iyi yolu nedir?
- 7. GSON kullanarak JSON API yanıtlarını işlemenin en iyi yolu nedir?
- 8. Hata iletilerini işlemenin en iyi yolu
- 9. Kimlik doğrulamasını işlemenin en iyi yolu .NET WCF Web API'sı
- 10. Rails Uygulaması'nda ayrılmış isimleri işlemenin en iyi yolu
- 11. Jmeter'da en iyi yolu bulmanın en iyi yolu nedir?
- 12. Raylar uygulamasında dinamik css'yi işlemenin en iyi yolu
- 13. İlişkisel diziyi C# ile işlemenin en kolay yolu nedir?
- 14. Golang'da api sürümlerini işlemenin idiotik yolu nedir?
- 15. UI güncellenirken bu arka plan sürecini işlemenin en iyi yolu nedir?
- 16. core.clj'yi kurmanın en iyi yolu nedir?
- 17. Dosyayı sunucudan indirmenin en iyi yolu nedir
- 18. Perl'de ekranı temizlemenin en iyi yolu nedir?
- 19. Bir animasyonu sürmenin en iyi yolu nedir?
- 20. Kitaplığı zenginleştirmeyi en iyi yolu scala'da nedir?
- 21. Javascript yürütme işleminin en iyi yolu nedir?
- 22. php'de uluslararasılaşmanın en iyi yolu nedir?
- 23. Nesneleri kapsayıcılarda paylaşmanın en iyi yolu nedir?
- 24. Süreyi saklamanın en iyi yolu nedir? MySQL
- 25. Gözlemlenebilir klonlamanın en iyi yolu nedir?
- 26. Kullanıcı bildirimlerini saklamanın en iyi yolu nedir?
- 27. Denemekten kaçınmanın en iyi yolu nedir?
- 28. ClickOnce dağıtımlarının oluşturulmasının en iyi yolu nedir
- 29. Basit sayılar tanımanın en iyi yolu nedir?
- 30. İç ürünleri oluşturmanın en iyi yolu nedir?
Bilginize: Böyle mouseEnter' veya 'mouseLeave' eylem yardımcı (https tartışmaya bakınız tarafından ele alınmamalıdır 'olarak Olaylar: // github .com/emberjs/ember.js/issues/1011 ve belirli bir yorum https://github.com/emberjs/ember.js/issues/1011#issuecomment-6367539) – pangratz
Pekala, sonunda çok fazla varsa {{action}} yardımcı yönteminin uygun olmadığı etkinliklerde, oldukça az sayıda görüntülemeye sahip olursunuz. – TestDemoTest