Tôi có một chế độ xem khá phức tạp để hiển thị liên quan đến một số loại đệ quy (danh sách lồng nhau của thư mục/tệp điển hình). Thực tế là nó chứa các đối tượng không đồng nhất (thư mục và tập tin) làm cho nó thậm chí còn khó khăn hơn để viết các mẫu Handlebars.Tạo liên kết lập trình bên trong chế độ xem EmberJS
Do đó, giải pháp duy nhất tôi tìm thấy là tạo chế độ xem và điền thủ công bộ đệm hiển thị. Tôi đến với giải pháp sau:
App.LibraryContentList = Ember.View.extend({
tagName: 'ol',
classNames: ['project-list', 'dd-list'],
nameChanged: function() {
this.rerender();
}.observes('[email protected]'),
render: function(buffer) {
// We only start with depth of zero
var content = this.get('content').filterProperty('depth', 0);
content.forEach(function(item) {
this.renderItem(buffer, item);
}, this);
},
renderItem: function(buffer, item) {
switch (item.constructor.toString()) {
case 'App.Folder':
this.renderFolder(buffer, item);
break;
case 'App.File':
this.renderFile(buffer, item);
break;
}
},
renderFolder: function(buffer, folder) {
buffer.push('<li class="folder dd-item">');
buffer.push('<span class="dd-handle">' + folder.get('name') + '</span>');
// Merge sub folders and files, and sort them by sort order
var content = this.mergeAndSort();
if (content.get('length') > 0) {
buffer.push('<ol>');
content.forEach(function(item) {
this.renderItem(buffer, item);
}, this);
buffer.push('</ol>');
}
buffer.push('</li>');
},
renderFile: function(buffer, album) {
buffer.push('<li class="album dd-item">');
buffer.push('<span class="dd-handle">' + file.get('name') + '</span>');
buffer.push('</li>');
}
});
Bây giờ, điều tôi muốn là có thể thêm liên kết để mỗi thư mục và mỗi tệp có thể nhấp và chuyển hướng sang một tuyến đường khác. Nhưng làm thế nào tôi phải làm điều đó, vì tôi không có quyền truy cập vào linkTo helper? Tôi đã thử chơi với chế độ xem LinkView nhưng không thành công. Tôi có nên đăng ký trình xử lý theo cách thủ công cho từng mục không?
Tôi cũng đã nghĩ về việc phá vỡ điều đó bằng một CollectionView thay vào đó, và chia nhỏ nội dung theo chiều sâu để tôi có thể hiển thị nó bằng cách sử dụng mẫu, nhưng có vẻ phức tạp hơn.
Mọi suy nghĩ?
Chỉ là một ý tưởng mà tôi đã không kiểm tra, cách thêm một cái gì đó như thế này 'Ember.Handlebars.compile (' {{{link story}}}')' – Hawili
Tôi đã nghĩ về điều này, nhưng tôi chỉ sử dụng thời gian chạy Handlebars (tôi đang biên dịch các mẫu của mình), vì vậy tôi muốn tránh giới thiệu sự phụ thuộc vào toàn bộ các Handlebars. –