2012-01-12 17 views
13

Tôi có trình trợ giúp định dạng ngày/giờ nhưng những gì nó tạo ra không cập nhật khi thuộc tính cơ bản thay đổi. Đây không phải là một bất ngờ, nhưng không ai biết làm thế nào để sản xuất bindings trong người giúp đỡ?Viết một trình trợ giúp tạo ra kết quả bị ràng buộc?

tôi gọi helper như thế này ...

{{timestamp created_at}} 

... và đây là helper bản thân:

Handlebars.registerHelper('timestamp', function(context, options) { 
    var formatter  = options.hash['format'] ? options.hash['format'] : 'hh:mm a MM-DD-YYYY'; 
    var original_date = Ember.getPath(this, context); // same as this.get(context) ? 
    var parsed_date  = moment(original_date); 
    var formatted_date = parsed_date.format(formatter); 

    return new Handlebars.SafeString("<time datetime=" + original_date +">" + formatted_date + "</time>"); 
}); 
+1

Một bản cập nhật nhỏ cho điều này chỉ đề cập đến trợ giúp bị ràng buộc đó vừa được cam kết làm chủ. xem https://github.com/emberjs/ember.js/commit/46469831e7fe22d43b5dcfdf7ff60bd7000aa9de –

Trả lời

27

Nó bây giờ là có thể tạo ra những người giúp đỡ tay lái bị ràng buộc sử dụng một Ember API công cộng.

Handlebars.registerBoundHelper('timestamp', function(date, options) { 
    var formatter  = options.hash['format'] ? options.hash['format'] : 'hh:mm a MM-DD-YYYY'; 
    var parsed_date  = moment(date); 
    var formatted_date = parsed_date.format(formatter); 

    return new Handlebars.SafeString("<time datetime=" + date +">" + formatted_date + "</time>"); 
}); 

Thông số được chuyển đến trình trợ giúp sẽ được giải quyết và trình trợ giúp sẽ được gọi lại bất cứ khi nào đường dẫn thay đổi.

+0

Điều đó cực kỳ tuyệt vời! Nó bổ sung thêm một lớp linh hoạt. Cá nhân tôi có "nội địa hóa" trong tâm trí. Trình trợ giúp "t" để dịch một chuỗi sẽ tự động cập nhật khi mảng STRINGS thay đổi. Tuyệt vời. Sẽ cung cấp cho một thử. – nembleton

+0

Lưu ý rằng không thể sử dụng với trình trợ giúp chặn: http://stackoverflow.com/questions/18005111/custom-handlebars-helper-parameter-is-not-resolved –

+1

Nếu bạn cần một người trợ giúp chặn, rất có thể bạn nên sử dụng một thành phần. –

10

Nó là tiếc phức tạp hơn tôi muốn tạo ra một trợ giúp tùy chỉnh có nội dung bị ràng buộc. Đây là một ví dụ mà Peter Wagenet đã viết: https://gist.github.com/1563710

Tôi sẽ vận động hành lang để việc này trở nên dễ dàng hơn.

+0

Crap thậm chí còn phức tạp hơn tôi nghĩ nó sẽ là ... Tôi muốn được quan tâm để xem nó trở nên đơn giản như thế nào. –

+0

Đồng ý. Chắc chắn có một ít đường ở đây. – ghempton

+0

Lưu ý rằng phiên bản mới nhất của Ember phá vỡ điều này vì Ember.Metamorph đã được đổi tên thành Ember._Metamorph. Đây là một gist cập nhật: https://gist.github.com/2588802 – rlivsey

0

Không chắc chắn nếu điều này áp dụng cho câu hỏi cụ thể này, nhưng tôi cũng đã tạo người trợ giúp trong chế độ xem và muốn các giá trị cập nhật khi dữ liệu trong chế độ xem Ember.js thay đổi. Cách tôi giải quyết vấn đề này là viết một người quan sát về các giá trị mà tôi muốn thay đổi và sử dụng jQuery để cập nhật giá trị cụ thể.

Ví dụ (trong Coffeescript):

... 

attrObserver: Ember.observer(() -> 
    $("#attrId").text(this.get("attr")) 

... 
Các vấn đề liên quan