Tôi đang xây dựng chức năng trên một trang web mà người dùng có thể thực hiện nhiều lần. Thông qua hành động của người dùng, một đối tượng / mô hình được tạo và áp dụng cho HTML bằng cách sử dụng ko.applyBindings ().
HTML ràng buộc dữ liệu được tạo thông qua các mẫu jQuery.
Càng xa càng tốt.
Khi tôi lặp lại bước này bằng cách tạo đối tượng / mô hình thứ hai và gọi ko.applyBindings (), tôi gặp hai vấn đề:
- Đánh dấu hiển thị đối tượng / mô hình trước đó cũng như đối tượng / mô hình mới.
- Lỗi javascript xảy ra liên quan đến một trong các thuộc tính trong đối tượng / mô hình, mặc dù nó vẫn được hiển thị trong đánh dấu.
Để giải quyết vấn đề này, sau lần vượt qua đầu tiên, tôi gọi .empty () của jQuery để loại bỏ HTML mẫu chứa tất cả các thuộc tính data-bind, để nó không còn trong DOM. Khi người dùng bắt đầu quy trình cho lần chuyển thứ hai, HTML liên kết dữ liệu sẽ được thêm lại vào DOM.
Nhưng như tôi đã nói, khi HTML được thêm lại vào DOM và liên kết lại với đối tượng / mô hình mới, nó vẫn bao gồm dữ liệu từ đối tượng / mô hình đầu tiên và tôi vẫn gặp lỗi JS không xảy ra. trong lần vượt qua đầu tiên.
Kết luận dường như là Knockout đang giữ các thuộc tính liên kết này, mặc dù đánh dấu đã bị xóa khỏi DOM.
Vì vậy, những gì tôi đang tìm kiếm là một phương tiện loại bỏ các thuộc tính bị ràng buộc này khỏi Knockout; nói với knockout rằng không còn một mô hình có thể quan sát được nữa. Có cách nào để làm việc này không?
BIÊN TẬP
Quá trình cơ bản là người dùng tải lên một tệp; sau đó máy chủ phản hồi với một đối tượng JSON, HTML liên kết dữ liệu được thêm vào DOM, sau đó mô hình đối tượng JSON được liên kết với HTML này bằng cách sử dụng
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Khi người dùng đã thực hiện một số lựa chọn trên mô hình, cùng một đối tượng được đăng trở lại máy chủ, HTML liên kết dữ liệu sẽ bị xóa khỏi DOM và sau đó tôi có JS sau
mn.AccountCreationModel = null;
Khi người dùng muốn làm điều này một lần nữa, tất cả các bước này được lặp lại.
Tôi e rằng mã quá 'liên quan' để thực hiện một bản demo jsFiddle.
init
hàm mà bạn truyền dữ liệu sẽ được áp dụng?