2011-11-02 32 views
6

Tôi có một ứng dụng web MVC 2 sử dụng trang chính. Trong các trang chủ, có một số khối sẵn sàng giống như hình dưới đây rải rác khắp các tập tinLàm thế nào để đảm bảo rằng jQuery của tôi. Đã chạy vào cuối

$(document).ready(function() { 
    ... 
}); 

Tương tự như vậy, nhiều người trong quan điểm của tôi cũng có nhiều khối đã sẵn sàng rải rác khắp.

Tôi đã được yêu cầu giới thiệu một khối sẵn sàng khác vào Master sẽ chạy cuối cùng.

Câu hỏi của tôi là "Có cách nào để đảm bảo rằng khối sẵn sàng mới này sẽ chạy cuối cùng không?". Suy nghĩ của tôi là nếu tôi đặt nó ở dưới cùng của trang Master sẽ làm điều đó nhưng tôi dường như không thể thuyết phục bản thân mình rằng điều này là chắc chắn.

+3

Theo như tôi hiểu cách nó hoạt động, đảm bảo rằng nó là cuối cùng trên trang là đủ. –

+0

Vì trang web được "soạn thảo" trên máy chủ dựa trên chế độ xem Master và MVC, tôi có thể đảm bảo rằng việc đặt $ (document) .ready() vào cuối tệp Master sẽ thực hiện thủ thuật không? – wcm

Trả lời

5

Đây là phương pháp .add của jQuery đó được gọi là để đẩy callback $(document).ready() của bạn vào danh sách của tất cả các callbacks:

add = function(args) { 
    var i, length, elem, type, actual; 
    for (i = 0, length = args.length; i < length; i++) { 
     elem = args[ i ]; 
     type = jQuery.type(elem); 
     if (type === "array") { 
      // Inspect recursively 
      add(elem); 
     } else if (type === "function") { 
      // Add if not in unique mode and callback is not in 
      if (!flags.unique || !self.has(elem)) { 
       list.push(elem); 
      } 
     } 
    } 
} 

nguồn: jQuery's callback

Vì vậy: những gì nó về cơ bản không được đẩy tất cả các hàm bên trong mảng list và sau khi sự kiện đã được kích hoạt - hãy gọi chúng theo cùng thứ tự và nếu hàm của bạn đã được đẩy cuối cùng - nó sẽ được gọi là cuối cùng.

Để đẩy nó cuối cùng bạn có thể khai báo nó thậm chí vào đầu sau bao gồm tất cả các file khác .js (chỉ cần đảm bảo rằng không có bất kỳ khác $(document).ready() dưới đây)

+0

Vì trang web được "soạn thảo" trên máy chủ dựa trên chế độ xem Chính và Chế độ xem MVC, tôi có thể đảm bảo rằng việc đặt $ (tài liệu) .ready() vào cuối tệp Master sẽ thực hiện thủ thuật không? – wcm

+0

BTW, cảm ơn bạn đã giải thích và hiển thị mã. – wcm

+0

@wcm Tôi chắc chắn bạn có thể :) – Teneff

0

Tôi nghĩ bạn có thể làm một mẹo nhỏ ở đây. như tôi không biết trường hợp chính xác mà phải phù hợp với giải pháp của bạn, tôi đề nghị bạn nên thêm một sự chậm trễ thông qua

window.setTimeout(một cuộc gọi đến cuntion của bạn ở đây, * Thời gian chậm trễ trong mili giây *);

Tôi biết nó không phải là thanh lịch, nhưng đây là những gì tôi nghĩ về, cho tôi biết nếu điều này đã giúp bạn, cảm ơn.

1

Dưới đây là một thủ thuật tôi sử dụng. Trong trang Master, tuyên bố

var postReadyEvents = []; 

Sau đó, trong các trang con, khi bạn có một chút mã mà cần phải chạy qua, làm

postReadyEvents.push(function() { 
    ///your stuff - I usually use this to resize a grid or something. 
}); 

Bây giờ, trong $ Master Page (tài liệu) .ready(), do

for(var i = 0; i < postReadyEvents.length; i++) 
{ 
    postReadyEvents[i](); 
} 

Khi bạn có $ (tài liệu) .ready() trên cả trang con và trang chính, trang con chạy trước và trang chính chạy sau cùng. Cách tiếp cận này cung cấp cho bạn khả năng kiểm soát khi một khối mã nhất định chạy.

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