2012-01-25 42 views
6

Xin chào, tôi đang cố gắng thiết lập ko để cho bất kỳ trình xử lý nhấp chuột nào được gọi là một chút mã tùy chỉnh được chạy. Whats cách dễ nhất để thêm một số mã pre và post vào trình xử lý ràng buộc 'click' là gì?knockoutjs ghi đè bindinghandlers

Trả lời

16

Bạn có thể tạo liên kết tùy chỉnh bao bọc ràng buộc click hoặc lưu tham chiếu đến các hàm initupdate ban đầu của liên kết click và thay thế thực tế.

Bạn có thể chọn thực thi một số mã trong hàm update sẽ được kích hoạt khi giá trị mô hình được cập nhật (bằng trình xử lý sự kiện được đính kèm trong hàm init hoặc lập trình) hoặc thực thi mã của bạn như một phần của trình xử lý thực tế . Nghe có vẻ như tôi muốn bạn sau này.

bạn ràng buộc có thể trông giống như:

(function() { 
    var originalInit = ko.bindingHandlers.click.init, 
     originalUpdate = ko.bindingHandlers.click.update; 

    ko.bindingHandlers.click = { 
     init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) { 
      var wrappedValueAccessor = function() { 
       return function(data, event) { 
        //run some pre code 
        ko.bindingHandlers.click.preOnClick.call(viewModel, data, event); 

        valueAccessor().call(viewModel, data, event); 

        //run some post code 
        ko.bindingHandlers.click.postOnClick.call(viewModel, data, event); 
       }; 

      }; 

      originalInit(element, wrappedValueAccessor, allBindingsAccessor, viewModel, context); 
     }, 
     update: originalUpdate, 
     preOnClick: function(data, event) { 
      alert("pre code for " + data.id); 
     }, 
     postOnClick: function(data, event) { 
      alert("post code for " + data.id); 
     } 
    }; 
})(); 

tôi chia ra các mã trước/sau như vậy mà tại thời gian chạy bạn có thể ghi đè lên ko.bindingHandlers.click.preOnClick hoặc ko.bindingHandlers.click.postOnClick

Đây là một mẫu: http://jsfiddle.net/rniemeyer/PksAn/

Nếu bạn cần chạy mã tùy chỉnh trong chức năng cập nhật, sau đó bạn có thể tách nó ra và chạy mã trước và sau của bạn ở đó và thực hiện originalUpdate ở giữa.

+0

cảm ơn RP. Điều đó làm cho rất nhiều ý nghĩa. – Chin

+0

RP, bạn có thể kiểm tra điều này không? Tôi cần một nhà cung cấp ràng buộc tùy chỉnh, http://stackoverflow.com/questions/14535102/binding-jagged-array-with-knockout – user960567

+0

Đây phải là câu trả lời được chấp nhận, mã đúng và giải pháp là đúng. –