Gần đây, tôi cần có chức năng tương tự trong ứng dụng của mình vì vậy tôi đã quyết định tạo gói của riêng mình sẽ thực hiện công việc đó ra khỏi hộp. Mặc dù nó vẫn đang hoạt động, bạn có thể cho nó đi.
Về cơ bản, toàn bộ phương pháp là như sau:
// Defines new method /extend
Template.prototype.copyAs = function (newTemplateName) {
var self = this;
// Creating new mirror template
// Copying old template render method to keep its template
var newTemplate = Template.__define__(newTemplateName, self.__render);
newTemplate.__initView = self.__initView;
// Copying helpers
for (var h in self) {
if (self.hasOwnProperty(h) && (h.slice(0, 2) !== "__")) {
newTemplate[h] = self[h];
}
}
// Copying events
newTemplate.__eventMaps = self.__eventMaps;
// Assignment
Template[newTemplateName] = newTemplate;
};
Trong mẫu mới của bạn (new_template.js) mà bạn muốn mở rộng một trừu tượng của bạn, viết như sau:
// this copies your abstract template to your new one
Template.<your_abstract_template_name>.copyAs('<your_new_template_name>');
Bây giờ , bạn có thể chỉ cần ghi đè người trợ giúp hoặc sự kiện của bạn (trong trường hợp của tôi là trợ giúp photos
) bằng cách thực hiện:
Template.<your_new_template_name>.photos = function() {
return [];
};
Ý của bạn sẽ đề cập đến các phương thức trợ giúp ghi đè và các phương thức trừu tượng không được ghi đè.
Lưu ý rằng tệp HTML cho mẫu mới là không cần thiết vì chúng tôi luôn đề cập đến tệp trừu tượng.
Mã nguồn có sẵn trên Github here!
Nguồn
2014-08-09 20:27:48
Tôi đã tạo [một gói] (https://atmosphere.meteor.com/package/view) được gọi là 'view' cho thiên thạch. Tôi sử dụng nó để bọc các quan điểm sao băng với một xương sống như lớp xem. Có lẽ bạn sẽ tìm thấy một số ý tưởng để bắt đầu với ở đó. – Andreas