Xin chào mọi người,
bây giờ là lần thử thứ tư của tôi để triển khai history.js trong ứng dụng Rails. Tôi có một cách tiếp cận đang chạy khá ổn, nhưng mã quá xấu xí. Hôm nay một lần nữa tôi nhìn vào mã và suy nghĩ: Làm thế nào tôi có thể làm cho điều này tốt hơn, dễ dàng hơn, nhiều hơn nữa?Cách thực hiện history.js trong Rails đúng cách?
Những gì tôi đã làm cho đến nay (và làm việc khá ổn, không hoàn hảo):
- Đặt
remote: true
để liên kết của tôi - jquery-ujs fetches
js.erb
HTML của tôi trông giống như :
<body>
<div id="content">
some content with buttons, etc.
</div>
</body>
js.erb
chứa:
History.pushState(
{
func: '$(\'#content\').html(data);',
data: '<%= j(render template: "news/index", formats: [:html]) %>'
},
'test title',
'<%= request.url %>'
);
Và sau đó history.js nhận chức năng và cung cấp dữ liệu. Vì vậy, nó thay thế content
-div bằng mã được tạo mới. Và nó cũng cập nhật URL. Mã này tôi phải đưa vào mỗi (!) js.erb
tệp.
suy nghĩ cuối cùng của tôi để làm cho nó một chút ít xấu xí là:
- Set
remote: true
để liên kết của tôi - Khi một liên kết được nhấp rồi nó lấy một số
js.erb
thay thế cáccontent
-div - Tất cả liên kết với
data-remote="true"
sẽ nhận đượcajax:success
-handler - Trên
ajax:success
URL mới được đẩy vào history.js
Nhưng vẫn còn một vấn đề trong đó. Sau đó, tôi có mã JavaScript:
$(document).on('ajax:success', 'a[data-remote="true"]', function() { ... });
Vấn đề là:. ajax:success
không bao giờ cháy nếu tôi thay thế -tag div
nơi liên kết (phải kích hoạt sự kiện) là trong
Có lẽ ai đó có thể giải quyết vấn đề của tôi ...
Bạn đã thấy jquery.pjax? –
Tôi đã xem trang histoy.js nhiều lần nhưng chưa bao giờ tập trung nỗ lực để thực sự thử nó. Tôi rất muốn thấy câu hỏi này được trả lời một cách rõ ràng. – Ashitaka
PJAX chỉ là HTML5. HTML4 trình duyệt chỉ nhận được các liên kết bình thường ... Với history.js, chúng tôi cũng nhận được AJAX cho các trình duyệt HTML4 –