2013-03-19 36 views

Trả lời

14

Mã sau sẽ lưu bản chỉnh sửa hiện tại.

Slick.GlobalEditorLock.commitCurrentEdit(); 

Bạn sẽ cần đặt điều này bên trong trình xử lý sự kiện mà bạn cho rằng sẽ kích hoạt lưu. Ví dụ, nếu bạn đang sử dụng soạn thảo văn bản mẫu plugin, tôi tin rằng một lớp editor-text CSS được thêm vào lĩnh vực đầu vào đó là tạo ra khi bạn đang chỉnh sửa một tế bào nên một cái gì đó như thế này nên làm việc:

$('#myGrid').on('blur', 'input.editor-text', function() { 
    Slick.GlobalEditorLock.commitCurrentEdit(); 
}); 
+0

Tôi có thể thiếu gì đó ở đây. Về lý thuyết, công trình này - bởi vì nếu tôi thêm nó vào giao diện điều khiển firebug và sau đó lấy tiêu điểm và mất tiêu điểm thì nó hoạt động một lần. Nhưng trong mã, ngay cả trong document.ready, nó không hoạt động: \ – sunzyflower

+0

Sai lầm của tôi, ví dụ mờ đó sẽ không hoạt động vì các trường nhập được thêm vào động. Bạn sẽ cần phải ràng buộc sự kiện bằng cách sử dụng 'on' để thay thế. Tôi đã cập nhật ví dụ, hãy thử. – clav

+0

Tôi nhận được lỗi sau: LoạiError: jQuery (...). Không phải là chức năng [Break On This Error] \t jQuery ('# myGrid'). On ('blur', 'input .editor-text ', function() { – sunzyflower

6

tôi thấy rằng tôi cần thiết để quấn handler clav trong một thời gian chờ:

$("#myGrid").on('blur', 'input.editor-text', function() { 

    window.setTimeout(function() { 

     if (Slick.GlobalEditorLock.isActive()) 
      Slick.GlobalEditorLock.commitCurrentEdit(); 

    }); 

}); 

để tránh các lỗi như:

Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist. 

khi sử dụng bàn phím để di chuyển. Có lẽ các bộ xử lý mờ mới cháy trước khi SlickGrid có thể làm xử lý riêng của mình và điều này gây ra vấn đề.

4

Thật không may, có lẽ do sự khác biệt trong xử lý sự kiện, phiên bản của Grame phá vỡ điều hướng bàn phím trong chrome. Để sửa lỗi này, tôi đã thêm kiểm tra khác để chỉ hành chỉnh sửa, nếu các yếu tố mới được tập trung không phải là một yếu tố biên tập trong lưới (do hàng hải bàn phím):

  $('#grid').on('blur.editorFocusLost', 'input.editor-text', function() { 
       window.setTimeout(function() { 
        var focusedEditor = $("#grid :focus"); 
        if (focusedEditor.length == 0 && Slick.GlobalEditorLock.isActive()) { 
         Slick.GlobalEditorLock.commitCurrentEdit(); 
        } 
       }); 
      }); 

Điều này dường như làm việc trong hiện tại các phiên bản của firefox, chrome và ie.

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