2014-05-14 16 views
6

Có thể giới hạn các tùy chọn hiển thị sẵn có trong một loại mối quan hệ của KeystoneJS bằng cách chỉ định điều kiện giá trị không? Về cơ bản, một mô hình có hai bộ trường mảng, thay vì cho phép người dùng quản trị chọn bất kỳ mục nào từ trường, tôi muốn giới hạn chỉ các mục là một phần của một bộ sưu tập cụ thể _id.Loại mối quan hệ KeystoneJS, giới hạn các mục có sẵn theo giá trị trường

+1

Câu hỏi này chưa rõ ràng. Tôi không hiểu bạn đang cố gắng làm gì và vấn đề là gì. Xin giải thích thêm. Và chia sẻ mã những gì bạn đã có để giải quyết vấn đề này. –

Trả lời

6

Không chắc chắn nếu đây chính xác là tính năng bạn đang tìm kiếm, nhưng bạn có thể chỉ định tùy chọn filter trên trường Relationship làm đối tượng và nó sẽ lọc kết quả để chỉ kết quả phù hợp được hiển thị.

Mỗi thuộc tính trong đối tượng filter hoặc phải là một giá trị để phù hợp trong lược đồ có liên quan, hoặc nó có thể là một giá trị động phù hợp với giá trị của path khác trong lược đồ (bạn có tiền tố con đường với một :).

Ví dụ:

giản đồ người dùng

User.add({ 
    state: { type: Types.Select, options: 'enabled, disabled' } 
}); 

bài Schema

// Only allow enabled users to be selected as the author 
Post.add({ 
    author: { type: Types.Relationship, ref: 'User', filter: { state: 'enabled' } } 
}); 

Hoặc cho một ví dụ năng động, hãy tưởng tượng bạn có một thiết lập role cho cả PostsUsers . Bạn chỉ muốn đối sánh các tác giả có cùng số rolepost.

giản đồ người dùng

User.add({ 
    userRole: { type: Types.Select, options: 'frontEnd, backEnd' } 
}); 

bài Schema

Post.add({ 
    postRole: { type: Types.Select, options: 'frontEnd, backEnd' }, 
    // only allow users with the same role value as the post to be selected 
    author: { type: Types.Relationship, ref: 'User', filter: { userRole: ':postRole' } } 
}); 

Lưu ý rằng điều này là không thực sự thực hiện như xác nhận back-end, nó chỉ là thực hiện trong quản lý giao diện người dùng. Vì vậy, nó là một nâng cao khả năng sử dụng hơn là một hạn chế.

1

Để mở rộng câu trả lời của Jed, tôi nghĩ thuộc tính chính xác (ít nhất là trong phiên bản KeystoneJS 0.2.22 mới nhất) là 'bộ lọc' thay vì 'bộ lọc'. 'bộ lọc' không hoạt động đối với tôi.

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