2012-02-21 37 views
8

Đây là câu hỏi khái niệm và tôi không thể tìm thấy câu trả lời trong SO, vì vậy, tôi ở đây:Tại sao sử dụng biến mẫu để "kết nối" bộ điều khiển với chế độ xem?

Tại sao các biến mẫu được sử dụng để kết nối bộ điều khiển và chế độ xem? Chúng ta không có hai đối tượng khác nhau của hai lớp khác nhau (Controller vs Views). Vì vậy, khi khung nhìn được hiển thị, chúng ta đang ở trong một ngữ cảnh khác, nhưng chúng ta đang sử dụng các biến cá thể của một đối tượng khác? Không phải cái đóng gói này bằng cách nào đó sao?

Rails quản lý để làm điều đó khớp từ đối tượng này với đối tượng khác như thế nào? Liệu nó sao chép tất cả các biến trường hợp của bộ điều khiển để xem?

+1

@meggar, trên thực tế, nó sử dụng các biến trực tiếp. Xem 'BasicObject # instance_eval' trong tài liệu Ruby và bạn sẽ thấy nó có thể như thế nào. Ngoài ra kiểm tra 'Binding'. –

Trả lời

6

Trong một nghĩa nào đó, bạn có thể nói rằng nó đang phá vỡ đóng gói. Tôi đã thấy rằng nếu bạn không cẩn thận, thật dễ dàng để có được logic nghiệp vụ/thuyết trình của bạn được trộn lẫn với nhau trong Rails. Nó thường bắt đầu khi tôi đang viết một mẫu xem, và khám phá ra rằng tôi cần một số giá trị mà tôi đã không vượt qua từ bộ điều khiển. Vì vậy, tôi quay trở lại và tinh chỉnh bộ điều khiển cho phù hợp với những gì tôi cần trong chế độ xem. Sau một lần chỉnh sửa, và cái khác, và một cái khác, bạn nhìn vào phương pháp điều khiển, và nó đang thiết lập tất cả các loại biến thể không có ý nghĩa trừ khi bạn nhìn vào khung nhìn để xem chúng là gì. Vì vậy, bạn kết thúc trong một tình huống mà bạn cần phải nhìn vào cả hai bộ điều khiển và xem để hiểu một trong hai, chứ không phải là có thể mất một hoặc khác trong sự cô lập.

Tôi nghĩ rằng việc sử dụng các biến mẫu (cùng với thủ thuật Binding) chỉ đơn giản là một cách để vượt qua bất kỳ giá trị nào bạn cần từ bộ điều khiển để xem, mà không cần phải khai báo trước (như bạn định nghĩa phương thức). Không có khai báo có nghĩa là ít mã để viết, và ít thay đổi khi bạn muốn tái cấu trúc và tổ chức lại mọi thứ.

4

Đường ray sử dụng evalBinding để chuyển các biến đối tượng điều khiển cho chế độ xem. Xem this presentation from Dave Thomas, có một ví dụ nhỏ tại phút 46 'giải thích cách thực hiện điều này.

+0

Nếu tôi hiểu chính xác OP được đề cập đến '@ variables' trong khi ràng buộc là hữu ích để gửi các biến cho một phần (trong người dân địa phương). Thú vị thứ, mặc dù. – tokland

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