Tôi muốn cập nhật các phần cụ thể của Grid
theo các cách khác nhau. Hãy xem xét ví dụ về đồ chơi sau: Tôi có hai hàng: một phải được cập nhật từng cái một (a, b, c), vì các biểu tượng này phụ thuộc vào các trình kích hoạt khác nhau; hàng thứ hai phụ thuộc vào một kích hoạt duy nhất (hiển thị) cho phép hiển thị/ẩn một số dữ liệu.Chỉ định động cục bộ trong lưới
Bây giờ tôi biết rằng tôi có thể bọc toàn bộ Grid
cấu thành Dynamic
, và thậm chí xác định các biểu tượng để theo dõi, do đó ví dụ này làm những gì tôi muốn:
Checkbox[Dynamic[show]]
test = {0, 0};
Dynamic[Grid[{{[email protected], [email protected], [email protected]},
If[show, Prepend[test, "test:"], {}]}, Frame -> All],
TrackedSymbols :> {show}]
Mặc dù vì lý do nào đó Tôi muốn có một số được chỉ định cục bộ Dynamic
, chỉ được áp dụng cho hàng thứ hai của Grid
.
Đối với những người đang tự hỏi những gì tình hình không tin kính nó sẽ là, chỉ cần tưởng tượng sau: show
được sử dụng trong bất kỳ a
, b
hoặc c
, và những Tôi không muốn để cập nhật khi show
đang thay đổi, thay đổi của họ phụ thuộc vào kích hoạt khác. Tại sao không xóa sau đó show
từ các biểu tượng của hàng đầu tiên? Hãy tưởng tượng, tôi không thể, vì show
có mặt trong một chức năng được sử dụng trong a
, b
hoặc c
và chức năng này tôi không thể truy cập dễ dàng.
Tất nhiên gói đối số đầu tiên của If
vào Dynamic
sẽ không giúp đỡ ở đây, như Grid
bản thân hoặc bất kỳ của các tế bào của nó sẽ không trở thành động:
Grid[{
{[email protected], [email protected], [email protected]},
If[[email protected], Prepend[test, "test:"], {}]
}, Frame -> All]
Bên cạnh đó, gói liên tiếp vào Dynamic
làm cho hàng đưa không hợp lệ, vì nó không có đầu List
nữa:
Grid[{
{[email protected], [email protected], [email protected]},
[email protected][show, Prepend[test, "test:"], {}]
}, Frame -> All]
Mapping Dynamic
so với hàng không hoạt động hoặc vì 01.không được cập nhật tự động:
Grid[{
{[email protected], [email protected], [email protected]},
Dynamic /@ If[show, Prepend[test, "test:"], {}]
}, Frame -> All]
Ngoài ra, gói Dynamic[If[...]]
xung quanh các thành viên danh sách làm việc, nhưng bây giờ tôi phải đánh giá If
3 lần thay vì chỉ 1.
Grid[{
{[email protected], [email protected], [email protected]},
Dynamic[If[show, #, ""]] & /@ Prepend[test, "test:"]
}, Frame -> All]
có muốn biết nếu có bất kỳ giải pháp nào để khắc phục vấn đề cụ thể này bằng cách áp dụng cục bộ trình bao bọc Dynamic
trên một hàng.
Vì vậy, bạn cần một giải pháp trong đó 1. có một lưới với hai hàng 2. cả hai hàng phụ thuộc vào 'show' 3. nhưng chỉ hàng thứ hai phải được cập nhật khi' hiển thị 'thay đổi. Tôi đã làm đúng chứ? – Szabolcs
Bạn có thể giải thích tại sao ba đánh giá của 'If' không mong muốn? Bài kiểm tra trong 'If' có đắt không? Chúng tôi có thể đưa ra một cái gì đó mà đánh giá thử nghiệm một lần duy nhất và lưu kết quả vào một biến mà sau đó điều khiển ba 'If'. Tôi tin rằng nếu bạn quấn toàn bộ điều thì bạn không thể tránh việc cập nhật 'a, b, c', nhưng tôi không chắc chắn! – Szabolcs
Có, bạn đúng về các yêu cầu và không, tất nhiên thử nghiệm trong If không quá đắt, và tại thời điểm mã chạy như vậy (ánh xạ Nếu). Thậm chí còn có vấn đề hơn nữa là một thứ khác, mà tôi đang cố gắng xác định ngay bây giờ. –