2013-04-29 40 views
6

tài liệu v1.0.0-rc.3 Ember của Ember.Array nói:dùng Ember của "quan sát (..)" để quan sát thay đổi của một số mảng

Bạn có thể sử dụng các phương pháp quy định tại module này để truy cập và sửa đổi mảng nội dung theo cách thân thiện với KVO. Bạn cũng có thể được thông báo bất cứ khi nào thành viên nếu [sic] một mảng thay đổi bằng cách thay đổi cú pháp của thuộc tính thành .observes ('* myProperty. []').

Tôi đã cố gắng đưa ra một ví dụ tối thiểu quan sát các thay đổi mảng, nhưng không thể khiến người quan sát phát súng. Một mẫu làm việc trông như thế nào?

P.S. thông báo this gotcha.

+1

bạn có thể thiết lập một jsfiddle trong ví dụ không hoạt động của mình không? – intuitivepixel

Trả lời

9

Ồ, có câu trả lời của tôi!

Có một số cách bạn có thể quan sát Em.A() thuộc tính. Bạn có .observes('a.[]'), .observes('[email protected]').observes('a.length'). Khái niệm này cũng giống như bất kỳ tài sản nào trong Ember, bạn chỉ cần thao tác trực tiếp mảng đó và người quan sát nên kích hoạt. Rõ ràng bằng cách sử dụng phương pháp set sẽ không hoạt động trên một mảng (Ember), vì vậy có lẽ đó là nơi bạn đã đi sai?

Tôi đã sửa đổi số jsfiddle cũ của mình thành tài khoản cho một mảng có thể quan sát được (tôi đã cập nhật mọi thứ lên phiên bản mới nhất). Tôi nghĩ rằng điều quan trọng cần lưu ý là mảng Ember không thực sự là một mảng - đó là một đối tượng với một số hàm và thuộc tính tùy chỉnh thực hiện các hàm javascript mảng thông thường của bạn. Vì vậy, bạn không thể làm một cái gì đó như: Em.A() = [1,2,3], vì loại Em.A là một đối tượng, không phải là một mảng.

Một lưu ý hữu ích là ArrayControllers có một nội dung của một Ember Array, có nghĩa là bạn phải tuân thủ các mảng nội dung, không phải là nội dung bản thân (ví dụ: không quan sát arraycontroller.content, nhưng thay vì quan sát arraycontroller.content.[]).

Đây là lý do tại sao bạn phải quan sát thuộc tính kỳ lạ prop.[] trên một mảng Ember, bởi vì giá trị của một mảng Ember không phải là những gì bạn mong đợi.

+0

Cảm ơn Deif vì phản hồi tuyệt vời này và những hiểu biết ... vâng, tôi không lấy mẫu làm việc cho một số hình ảnh tương tự: Tôi đã sử dụng (... gắn bó với ví dụ jsFiddle của bạn) 'this.person.push (3)' thay vì 'this.person.pushObject (3)'. Người ta cần phải sử dụng phương thức 'pushObject (..)' để có các quan sát viên 'quan sát (..)' cháy. [Tôi đoán đây là những gì các tài liệu Ember có nghĩa là với "KVO tuân thủ"] (http://emberjs.com/api/classes/Ember.MutableArray.html#method_pushObject). – Abdull

+0

Tuyệt vời ... !!! @Deif –

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