Lượt xem so với thành phần trong Ember.js


143

Tôi đang học ember.js và tôi đang cố gắng tìm hiểu sự khác biệt giữa chế độ xem và thành phần. Tôi thấy cả hai như là một cách để làm cho các thành phần tái sử dụng.

Từ trang web của Ember về lượt xem:

Lượt xem trong Ember.js thường chỉ được tạo vì các lý do sau:
-Khi bạn cần xử lý tinh vi các sự kiện người dùng
-Khi bạn muốn tạo thành phần có thể sử dụng lại

Từ trang web của Ember về các thành phần:

Thành phần là thẻ HTML tùy chỉnh có hành vi bạn triển khai bằng JavaScript và giao diện mà bạn mô tả bằng các mẫu Tay cầm. Chúng cho phép bạn tạo các điều khiển có thể sử dụng lại có thể đơn giản hóa các mẫu ứng dụng của bạn.

Vì vậy, sự khác biệt chính giữa một khung nhìn và một thành phần là gì? Và đâu là một ví dụ phổ biến mà tôi muốn sử dụng chế độ xem trên một thành phần và ngược lại?

Câu trả lời:


170

Ember.View

Một Ember.View hiện bị giới hạn ở các thẻ được W3C tạo cho bạn. Nhưng nếu bạn muốn xác định các thẻ HTML dành riêng cho ứng dụng của mình và sau đó triển khai hành vi của chúng bằng JavaScript? Bạn không thể làm điều này thực sự với Ember.View .

Ember.Component

Đó chính xác là những gì các thành phần cho phép bạn làm. Trên thực tế, thật là một ý tưởng tốt khi W3C hiện đang hoạt động trên thông số Yếu tố tùy chỉnh .

Việc triển khai các thành phần của Ember cố gắng càng sát với đặc tả Thành phần Web càng tốt. Khi các yếu tố tùy chỉnh có sẵn rộng rãi trong các trình duyệt, bạn sẽ có thể dễ dàng di chuyển các thành phần Ember của mình sang tiêu chuẩn W3C và chúng có thể được sử dụng bởi các khung công tác khác cũng đã áp dụng tiêu chuẩn mới.

Điều này rất quan trọng đối với chúng tôi rằng chúng tôi đang hợp tác chặt chẽ với các cơ quan tiêu chuẩn để đảm bảo việc triển khai các thành phần của chúng tôi phù hợp với lộ trình của nền tảng web.

Cũng cần lưu ý rằng Ember.Component thực sự là Ember.View (một lớp con) nhưng nó hoàn toàn bị cô lập . Quyền truy cập thuộc tính trong các mẫu của nó đi đến đối tượng xem và các hành động cũng được nhắm mục tiêu vào đối tượng xem . Không có quyền truy cập vào xung quanh contexthoặc bên ngoài controller tất cả thông tin theo ngữ cảnh được truyền vào , đó không phải là trường hợp với Ember.View thực sự có quyền truy cập vào bộ điều khiển xung quanh, ví dụ như trong chế độ xem bạn có thể làm gì this.get('controller')đó sẽ cung cấp cho bạn bộ điều khiển hiện được liên kết với chế độ xem.

Vì vậy, sự khác biệt chính giữa một khung nhìn và một thành phần là gì?

Vì vậy, sự khác biệt chính bên cạnh các thành phần đó cho phép bạn tạo các thẻ của riêng mình và trong một thời điểm nào đó trong tương lai khi Các thành phần tùy chỉnh có sẵn cũng di chuyển / sử dụng các thành phần đó trong các khung khác sẽ hỗ trợ các thành phần tùy chỉnh, thực sự đến một lúc nào đó, một thành phần than hồng sẽ làm cho một cái nhìn hơi lỗi thời tùy thuộc vào trường hợp thực hiện cụ thể.

Và đâu là một ví dụ phổ biến mà tôi muốn sử dụng chế độ xem trên một thành phần và ngược lại?

Thực hiện theo các điều trên phụ thuộc rõ ràng vào các trường hợp sử dụng của bạn. Nhưng theo nguyên tắc thông thường, nếu bạn cần trong chế độ xem của mình truy cập vào bộ điều khiển xung quanh, v.v. hãy sử dụng Ember.View , nhưng nếu bạn muốn tách biệt chế độ xem và chỉ truyền thông tin mà nó cần để hoạt động khiến nó không thể biết được ngữ cảnh và có thể tái sử dụng nhiều hơn nữa, hãy sử dụng Ember.Component .

Hy vọng nó giúp.

Cập nhật

Với việc xuất bản Road to Ember 2.0, giờ đây bạn được khuyến khích sử dụng Thành phần thay vì Chế độ xem trong hầu hết các trường hợp.


1
Mối quan tâm duy nhất của tôi về các thành phần là khi chúng trở nên phức tạp. Tôi chưa biết cách tách phần logic khỏi phần kết xuất. Tôi thường xem, bạn có sự tách biệt này và có thể đưa logic vào bộ điều khiển, nhưng với thành phần, tôi có xu hướng nói rằng cuối cùng bạn sẽ có một mớ hỗn độn rất phức tạp và có lẽ rất lớn. Bạn có biết nếu có thể định nghĩa một bộ điều khiển chuyên dụng cho các thành phần không? Hoặc có lẽ các thành phần chỉ không nhằm mục đích quản lý các yếu tố đồ họa phức tạp.
sly7_7

3
@ sly7_7, vâng tôi hiểu ý của bạn. Nhưng tôi sẽ nghĩ về một thành phần như một hộp đen, chỉ hành xử dựa trên dữ liệu mà nó được truyền vào. Và có tùy thuộc vào những gì nó làm điều này có thể trở thành một mớ hỗn độn rất nhanh. Một bộ điều khiển chuyên dụng sẽ có ý nghĩa tuyệt đối, và cách nó có thể hoạt động nếu các thành phần có thể trở thành logic được đưa vào trong nó, nhưng theo tôi biết các thành phần không phải là một phần của thùng chứa ember theo thiết kế, tôi đoán nó có thể thay đổi trong tương lai giải quyết chính xác một cái gì đó như thế này. Điểm tốt nào!
visualpixel

2
bất kỳ ràng buộc có thể đi ra khỏi một thành phần? IE, với dạng khối của một thành phần có thể nội dung các thành phần trong khối liên kết với các thuộc tính của thành phần đó hay tôi phải sử dụng chế độ xem trong trường hợp này?
Michael Johnston

2
ah, vâng, họ có thể. {{view.xxxx}}hoạt động trong một thành phần giống như trong một khung nhìn.
Michael Johnston

Nhận xét của Tom Dale về chủ đề này: ember.zone/the-confusion-around-ember-view-and-components/ gợi
Akshay Rawat

17

Câu trả lời rất đơn giản: sử dụng các thành phần

Theo một video đào tạo được ghi lại vào tháng 8 năm 2013, Yehuda Kats và Tom Dale (Thành viên nhóm Ember Core) đã nói với khán giả không sử dụng lượt xem trừ khi bạn là nhà phát triển khung. Họ đã thực hiện nhiều cải tiến cho Tay lái và Thành phần được giới thiệu, do đó, các chế độ xem không còn cần thiết nữa. Lượt xem được sử dụng nội bộ để cung cấp năng lượng cho những thứ như {{#if}} và {{socket}}.

Các thành phần cũng bắt chước chặt chẽ tiêu chuẩn Thành phần Web sẽ được tích hợp vào trình duyệt, do đó, có rất nhiều lợi ích phụ để trở nên thoải mái khi xây dựng Thành phần Ember.

Cập nhật 2014-11-27

Bây giờ thậm chí còn quan trọng hơn khi sử dụng các thành phần thay vì chế độ xem, vì Ember 2.0 sẽ sử dụng các Thành phần có thể định tuyến khi tuyến đường được nhập, thay vì bộ điều khiển / chế độ xem. Để chứng minh ứng dụng của bạn trong tương lai, tốt nhất bạn nên tránh xa Lượt xem.

Nguồn:


5
"Nếu bạn cảm thấy cần sử dụng chế độ xem, hãy sử dụng Thành phần thay thế." là lời khuyên tồi tệ, và phản bội sự thiếu hiểu biết về sự cô lập mà các thành phần liên quan.
jmcd

@jmcd, mặc dù nhận xét đó đến từ chính các nhà phát triển khung, tôi đã lấy nó ra.
Johnny Oshika

2
Tôi tìm thấy nguồn: Đào tạo video Gaslight, video 10.3 Thành phần Hỏi & Đáp @ 26m. Tom nói: '' Vì những ví dụ đó đã được viết, ... chúng tôi đã thêm Thành phần [mà] không tồn tại khi những ví dụ đó được viết. Nói chung tôi sẽ nói Lượt xem không phải là thứ mà chúng tôi mong đợi hầu hết các nhà phát triển sẽ viết, chúng là một đối tượng giữ sách nội bộ vào thời điểm này '
jmcd

2
@jmcd, Trong video đó @ 26:15, Tom nói "về cơ bản không sử dụng Lượt xem". Ngoài ra, nếu bạn nhảy tới 30m trong cùng một video, Yehuda Katz nói: "Về cơ bản, View là một chi tiết triển khai bên trong ... bạn có thể sử dụng View, nhưng sau đó bạn là nhà phát triển khung. Thay vào đó, bạn nên sử dụng một trong những điều sau mà chúng tôi đã xây dựng cho bạn sử dụng Chế độ xem và ứng dụng gần nhất với Chế độ xem nhưng có ngữ nghĩa tốt hơn là Thành phần. Bất kỳ điều gì bạn có thể đã sử dụng Chế độ xem trước đó, Thành phần đều ổn. "
Johnny Oshika

5

Hiện tại - v2.xđang được phát hành ổn định hiện tại - lượt xem đã hoàn toàn không được chấp nhận. Người ta nói rằng các lượt xem đang bị xóa khỏi API Ember 2.0 .

Vì vậy, sử dụng {{view}}từ khóa trong Ember 2.0 sẽ kích hoạt một xác nhận:

Khẳng định không thành công: Sử dụng {{view}}hoặc bất kỳ đường dẫn nào dựa trên nó đã bị xóa trong Ember 2.0

Nếu bạn phải sử dụng chế độ xem trong Ember 2.0, bạn có thể sử dụng addon ember-legacy-view , tương thích với Ember cho đến phiên bản 2.4 .

Vì vậy, để tổng hợp - các thành phần là hiện tại (chế độ xem bị xóa) và tương lai - chúng cũng sẽ thay thế bộ điều khiển. Xem RFC Thành phần có thể định tuyến .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.