2012-05-17 8 views
6

Tôi đang đào hoàn toàn trên thiên thạch, nhưng tôi đang cố gắng cắt giảm tính toàn cầu của các ví dụ và thêm một dấu gạch ngang OOP.Bao bọc các mẫu xử lý meteor.js trong các lớp coffeescript

Hiện nay, mã của tôi trông như thế này:

# View for Search Form 
form = Template.SearchForm 
form.events = 
    'submit #search_form' : query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : clear_query_field 

form.page = -> Songs.page 
form.total_pages = -> Songs.total_pages 

Nhưng, một cột sống la hoặc xương sống, những gì tôi thực sự muốn có một cái gì đó như thế này:

class SearchForm extends Template.SearchForm 
    events: 
    'submit #search_form' : query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : clear_query_field 


    page : -> Songs.page 
    total_pages : -> Songs.page 

    # etc etc 

form = new SearchForm 

bên phải là gì cách để bọc một handlebars mẫu trong thiên thạch?

Tôi đã quản lý để bọc Meteor.Collection, nhưng vì tay lái đặt tên cho đối tượng sau mẫu, tôi không chắc chắn đúng cách để làm điều đó cho Mẫu.

CẬP NHẬT

@ Greg chỉ ra rằng bạn có thể sử dụng _.extend để thêm các thuộc tính. Điều đó làm việc, nhưng nếu tôi muốn gấp các phương thức xử lý sự kiện 'query_submitted' và 'clear_query_field' vào lớp đó thì sao? Một cái gì đó như thế này:

_.extend Template.SearchForm, 
    events : 
    'submit #search_form' : @query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : @clear_query_field 

    page : -> Songs.page 
    total_pages : -> Songs.total_pages 

    clear_query_field : (event) -> 
    console.log 'focus' 

    query_submitted : (event) -> 
    event.preventDefault() 
    Songs.clear() 
    Songs.query = $('#query')[0].value 
    Songs.search() 

Không hoạt động. Xử lý sự kiện không được gọi là đúng và tôi nhận được sai sót trong giao diện điều khiển như:

Uncaught TypeError: Object [object Window] has no method 'query_submitted'

Tương tự,

events : 
    'submit #search_form' : (e) -> @query_submitted(e) 

Cung cấp:

Uncaught TypeError: Cannot call method 'call' of undefined

Vì vậy, những gì còn thiếu?

Trả lời

2

Meteor đi kèm với dấu gạch dưới, do đó bạn có thể:

_.extend Template.SearchForm, 
    events: 
    'submit #search_form' : query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : clear_query_field 

    page: -> Songs.page 

    total_pages: -> Songs.page 
+0

Xin cảm ơn, @greg! Tôi đã tìm thấy giải pháp _.extend, nhưng tôi vẫn gặp sự cố khi mở rộng để bao gồm các hàm xử lý sự kiện. Tôi đã cập nhật câu hỏi, bạn sẽ có một cái nhìn? –

1

Các bạn đã thử thay thế @ với Template.Searchform. trong sự kiện ràng buộc của bạn?

+0

này hoạt động nếu bạn lần đầu tiên mở rộng với các bộ xử lý, sau đó mở rộng một lần nữa với các định nghĩa sự kiện: '_.extend Template.SearchForm, clear_query_field: (sự kiện) -> yadda yadda _.extend Template.SearchForm sự kiện: 'tập trung #query': clear_query_field ... ' –

+0

@ScottSimon bạn có thể cung cấp bản cập nhật trong câu hỏi ban đầu của mình, về những phát hiện của bạn. tks –