Tôi muốn lưu trữ các đối tượng khác nhau trong cùng một mảng nội dung bộ điều khiển và hiển thị từng mẫu bằng cách sử dụng mẫu xem thích hợp, nhưng lý tưởng là cùng một chế độ xem.Chọn mẫu xem theo kiểu kiểu/giá trị đối tượng bằng cách sử dụng Ember.js
Tôi đang xuất các đối tượng danh sách bằng cách sử dụng mã bên dưới. Họ hiện đang giống nhau, nhưng tôi muốn có thể sử dụng những cái khác nhau.
<script type="text/x-handlebars">
{{#each App.simpleRowController}}
{{view App.SimpleRowView class="simple-row" contentBinding="this"}}
{{/each}}
</script>
Phiên bản cắt xuống của chế độ xem bên dưới. Các chức năng khác mà tôi chưa đưa vào có thể được sử dụng cho bất kỳ đối tượng nào, bất kể mô hình. Vì vậy, tôi lý tưởng sẽ có một cái nhìn (mặc dù tôi đã đọc một số bài báo về mixins có thể giúp đỡ nếu không).
<script>
App.SimpleRowView = Em.View.extend({
templateName: 'simple-row-preview',
});
</script>
Thử nghiệm đầu tiên của tôi cho phép các loại đối tượng khác nhau kết thúc với nhiều điều kiện trong 'xem trước hàng đơn giản' - nó trông thật khủng khiếp!
Có cách nào kiểm soát động templateName hoặc chế độ xem được sử dụng trong khi lặp qua mảng nội dung của tôi không?
CẬP NHẬT
Cảm ơn rất nhiều để hai người được hỏi. Mã cuối cùng được sử dụng trên chế độ xem bên dưới. Một số mô hình của tôi là tương tự, và tôi thích ý tưởng có thể chuyển đổi giữa mẫu (hoặc một loại 'trạng thái') trong ứng dụng của tôi.
<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>
Đây là một câu trả lời rất tốt, nhưng không may, đây là trường hợp mà khung nhìn không được thêm vào thông qua một trình trợ giúp tay lái nhưng là một lớp được chọn tự động bởi ember. Trong trường hợp đó, bạn không thể truy cập 'nội dung' hay' điều khiển' (được thảo luận ở đây: http://stackoverflow.com/questions/15337065/how-to-get-any-controller-instance-from-init- phương pháp-of-a-view). Giải pháp của tôi trong trường hợp này là có một phương thức quan sát 'controller.content' và thiết lập khung nhìn tương ứng trong hàm này thông qua' this.set ('currentView', view) ' – vanthome