Ứng dụng của tôi được cấu trúc như một loạt các trình cắm thêm chưa được viết. Có một lý do dài cho điều này, nhưng với mỗi năm mới, logic kinh doanh sẽ khác nhau và chúng tôi không biết nó sẽ như thế nào (Hãy suy nghĩ của TurboTax nếu điều đó giúp). Các trình cắm thêm bao gồm cả các thành phần máy chủ và máy khách. Các thành phần máy chủ giao dịch với logic nghiệp vụ và lưu giữ dữ liệu vào các bảng cơ sở dữ liệu sẽ được tạo ra sau đó. JavaScript điều khiển DOM cho các trình duyệt để hiển thị sau đó.Cách sạch sẽ để máy chủ trả về một hàm JavaScript mà sau đó sẽ được gọi ra là gì?
Mỗi plugin sống trong một hội đồng riêng biệt, để chúng không làm phiền ứng dụng chính, nghĩa là chúng tôi không muốn biên dịch lại ứng dụng chính. Câu chuyện dài ngắn, tôi đang tìm kiếm một cách để trả về các hàm JavaScript cho máy khách từ một yêu cầu nhận Ajax và thực thi các hàm JavaScript này (chỉ được trả về). Gọi một hàm trong Javascript thật dễ dàng. Phần khó khăn là làm thế nào để tổ chức hoặc cấu trúc để tôi sẽ không phải đối phó với vấn đề bảo trì. Vì vậy, concat sử dụng StringBuilder để kết thúc với mã JavaScript là kết quả của việc gọi toString() từ đối tượng xây dựng chuỗi là không có câu hỏi.
Tôi muốn không có sự khác biệt giữa việc viết mã JavaScript bình thường và viết mã Javascript cho mục đích động này.
Cách khác là thao tác DOM ở phía máy chủ, nhưng tôi nghi ngờ rằng nó sẽ thanh lịch như sử dụng jQuery ở phía máy khách. Tôi mở cho một thư viện C# hỗ trợ các cuộc gọi có dây chuyền như jQuery cũng thao túng DOM.
Bạn có bất kỳ ý tưởng nào hoặc là quá nhiều để hỏi hoặc bạn có quá bối rối không?
Chỉnh sửa1: Vấn đề là tránh biên dịch lại, do đó kiến trúc trình cắm thêm. Trong một số phần khác của chương trình, tôi đã sử dụng khái niệm tải tệp Javascript động. Điều đó hoạt động tốt. Những gì tôi đang tìm ở đây là ở đâu đó ở giữa chương trình khi một yêu cầu Ajax được gửi đến máy chủ.
Chỉnh sửa 2: Để minh họa cho câu hỏi của tôi:
Thông thường, bạn sẽ thấy đoạn mã sau. Một yêu cầu Ajax được gửi đến máy chủ, kết quả JSON được trả về cho máy khách, sau đó sử dụng jQuery để thao tác DOM (tạo thẻ và thêm vào thùng chứa trong trường hợp này).
var container = $('#some-existing-element-on-the-page');
$.ajax({
type: 'get',
url: someUrl,
data: {'': ''},
success: function(data) {
var ul = $('<ul>').appendTo(container);
var decoded = $.parseJSON(data);
$.each(decoded, function(i, e) {
var li = $('<li>').text(e.FIELD1 + ',' + e.FIELD2 + ',' + e.FIELD3)
.appendTo(ul);
});
}
});
Ở trên cực kỳ đơn giản. Nhưng vào năm tới, những gì máy chủ trả về là hoàn toàn khác nhau và cách dữ liệu được hiển thị cũng sẽ khác nhau. Nói cách khác, đây là những gì tôi muốn:
var container = $('#some-existing-element-on-the-page');
$.ajax({
type: 'get',
url: someUrl,
data: {'': ''},
success: function(data) {
var decoded = $.parseJSON(data);
var fx = decoded.fx;
var data = decode.data;
//fx is the dynamic function that create the DOM from the data and append to the existing container
fx(container, data);
}
});
Tôi không cần biết, vào thời điểm này những dữ liệu sẽ như thế nào, nhưng trong tương lai tôi sẽ, và sau đó tôi có thể viết fx cho phù hợp.
Vui lòng xem các chỉnh sửa mới nếu chúng có thể làm cho câu hỏi rõ ràng hơn cho bạn. –