2013-04-19 13 views
5

Tôi cần phải gán một thuộc tính data-tĩnh cho một Ember.View, làm cách nào để thiết lập nó trong đối tượng View thay vì trong thẻ {{view }}.Làm cách nào để gán một thuộc tính dữ liệu tĩnh cho chế độ xem ember?

App.MessagesFormView = Ember.View.extend({ 
    tagName: 'div', 
    classNames: ['modal', 'fade'], 
    didInsertElement: function() { 
    this.$().modal('show') 
    }, 
    willDestroyElement: function() { 
    this.$().modal('hide') 
    }, 
}) 

Trả lời

4

này phải được thực hiện bằng cả một tài sản của đối tượng Ember.View attributeBindingsdata-backdrop hoặc data-whatever.

App.MessagesFormView = Ember.View.extend({ 
    tagName: 'div', 
    classNames: ['modal', 'fade'], 
    // Set a data attribute, of a view, requires both an attribute binding and 
    // an attribute assignment 
    attributeBindings: ['data-backdrop'], 
    'data-backdrop': 'static', 
    didInsertElement: function() { 
    this.$().modal('show') 
    }, 
    willDestroyElement: function() { 
    this.$().modal('hide') 
    }, 
}) 
+1

Ví dụ của bạn thực hiện thủ thuật nhưng không chỉ thêm thuộc tính * tĩnh * đơn giản vào phần tử. Nó sẽ liên kết thuộc tính với giá trị thuộc tính và sau đó sẽ truyền các thay đổi thuộc tính cho thuộc tính, có thể là quá mức cần thiết đối với một số trường hợp sử dụng (bootstrap 'data-toggle' bất kỳ ai?). Tôi nghi ngờ cách duy nhất để thêm một thuộc tính tĩnh thực sự là thông qua 'this. $(). Attr ('data-toggle', 'collapse')' trong 'didInsertElement'. – dev

6

Thật không may, tôi không có đủ uy tín để nhận xét về câu trả lời Ola, nhưng tôi tin rằng một cách tốt hơn một chút để làm điều này là không sử dụng một chuỗi (văn bản trong dấu ngoặc kép) để biểu thị sở hữu thuộc tính dữ liệu Tên. Thay vào đó, viết tên thuộc tính của bạn trong camelCase và Ember sẽ tự động liên kết nó với thuộc tính hyphenated. Ví dụ:

App.MessagesFormView = Ember.View.extend({ 
    tagName: 'div', 
    attributeBindings: ['data-backdrop'], 
    dataBackdrop: 'static', // Binds to data-backdrop. Awesome! 
}); 

Tôi hy vọng điều đó có ý nghĩa!

+0

Vì lý do nào đó, điều này không hiệu quả với tôi. Tôi đồng ý rằng nó có vẻ giống như Ember Way, nhưng không làm điều đó (tôi đang đấu thầu các thuộc tính trong một Component, không phải là View, có thể thay đổi mọi thứ?) –

+0

Có lẽ một bản cập nhật của Ember đã xóa chức năng này? –

+0

@DuncanWalker bạn đang sử dụng phiên bản nào của ember? – spinlock