Tôi đã đi qua một số tình huống mà tôi phải mã gọi mẫu của tôi như thế này:cú pháp mở rộng cho truyền thông số để KnockoutJS mẫu
<!-- ko template: {name: 'paginatedList',
data: {listContainer: paginatedResults, itemTemplate: $parent.template}} -->
<!-- /ko -->
vì ngoài đối tượng dữ liệu của tôi (ví dụ, paginatedResults
), tôi cần truyền thông tin bổ sung như tên của mẫu để sử dụng trong các mục kết xuất. Ví dụ khác, khi hiển thị một mục trong danh sách, tôi có thể cần phải biết cài đặt hiện tại của bộ lọc được lưu trữ trong một số ngữ cảnh được xóa xa một cách hợp lý khỏi mục trong danh sách. Thay vì phải làm méo mô hình dữ liệu của tôi (trong ví dụ trên, thay thế paginatedResults
bằng {listContainer: paginatedResults, itemTemplate: $parent.template}}
, sẽ tốt hơn nếu có một chút cú pháp trên các mẫu cho phép tôi chuyển qua (và acccrue vì các mẫu được đánh giá theo thứ bậc) một số bối cảnh thêm rằng một mẫu sâu-lồng nhau có thể cần khi vẽ bản thân.
tôi đoán những gì tôi tự hỏi về là tính khả thi của việc thêm một thêm (không bắt buộc) tham số cho ko.bindingHandlers
chức năng (init
và update
) để làm cho chúng trông giống như này:
function (element,
valueAccessor,
allBindingsAccessor,
viewModel,
bindingContext,
context)
Khi mã hóa ví dụ trên, tôi phải để có thể nói điều gì đó như
<!-- ko template: {name: 'paginatedList',
data: paginatedResults,
context: {itemTemplate: $parent.template}} -->
<!-- /ko -->
hoặc tốt hơn chưa,
<!-- ko template: {name: 'paginatedList',
data: paginatedResults,
itemTemplate: $parent.template} -->
<!-- /ko -->
và có itemTemplate
trở thành một biến tôi có thể tham khảo trong các mẫu lồng nhau và data-bind
thuộc tính.
Điều này có hợp lý không? Tôi không hiểu rõ về mức độ khó khăn của việc thực hiện này. Tôi đoán có một điều đáng lo ngại là va chạm tên, nhưng một số quy ước đặt tên có thể phá vỡ điều đó.
Gene
Cảm ơn! Tôi đồng ý rằng nó là loại điều đúng, nhưng không đủ để đảm bảo một trình xử lý ràng buộc thêm. Sẽ rất thú vị để xem tần suất mẫu này xuất hiện trong các ứng dụng phức tạp. –
Cảm ơn nó giúp tôi rất nhiều.Nếu tôi viết một trình bao bọc mẫu, tôi có thể đặt tên mẫu bên trong 'init' không? – tbruyelle
@tbruyelle - bạn chắc chắn có thể đặt tên. Ý tưởng sẽ được rằng bên trong wrapper của bạn ràng buộc bạn xây dựng các tùy chọn mà bạn muốn vượt qua để thực sự ràng buộc mẫu. Đây là một mẫu có thể chung chung hơn bạn cần (bạn chỉ có thể đặt tên trên đối tượng valueAccessor()): http://jsfiddle.net/rniemeyer/7rcFD/ –