2009-07-06 34 views
13

Tôi muốn tách mã JavaScript khỏi chế độ xem.
tôi đã yêu cầu để thực hiện nội địa hóa đối với một nút hình ảnh đơn giản được tạo ra bởi JavaScript:Cách xử lý nội địa hóa trong các tệp JavaScript?

<img src="..." onclick="..." title="Close" /> 

kỹ thuật tốt nhất để bản địa hoá các tiêu đề của nó là gì?

PS: Tôi đã tìm thấy a solution bởi Ayende. Đây là hướng đi đúng.

Chỉnh sửa:
Tôi đã nhận lớp trợ giúp bản địa hóa cung cấp phương thức mở rộng Controller.Resource('foo').

Tôi đang định mở rộng (helper) để nó có thể trả về tất cả tài nguyên JavaScript (từ thư mục con "ClientSideResources" trong App_LocalResources) cho bộ điều khiển được chỉ định theo tên của nó. Sau đó, gọi điện thoại trong số BaseController, thêm nó vào ViewData và hiển thị nó trong Layout.

Đó có phải là một ý tưởng hay không?

Trả lời

9

EDIT

xem xét bằng văn bản cho các nguồn lực địa phương cần thiết để một đối tượng JavaScript (băm) và sau đó sử dụng nó cho tra cứu cho các đối tượng tự động tạo ra của bạn. Tôi nghĩ điều này tốt hơn là quay lại máy chủ để dịch. Điều này tương tự như thêm nó thông qua chế độ xem, nhưng có thể linh hoạt hơn một chút. FWIW, tôi có thể xem xét các tài nguyên bản địa hóa là một phần của View, không phải là một phần của bộ điều khiển.

Trong Xem:

<script type="text/javascript" 
     src='<%= Url.Content("~/Resources/Load?translate=Close,Open" %>'></script> 

đó sẽ ra cái gì đó như:

var local = {}; 
local.Close = "Close"; 
local.Open = "Open"; 

Nếu không có tham số của nó sẽ ra toàn bộ băm dịch. Sử dụng đối số cho bạn khả năng tùy chỉnh nó cho mỗi lượt xem.

Sau đó, bạn sẽ sử dụng nó trong các tập tin JavaScript của bạn như:

$(function(){ 
    $('#button').click(function() { 
     $("<img src=... title='" + local.Close + "' />") 
      .appendTo("#someDiv") 
      .click(function() { ... }); 
    }); 
}); 

Trên thực tế, tôi không quá kiểu cách về việc giữ gìn mã JavaScript của tôi ra khỏi quan điểm của tôi miễn là mã JavaScript được khu trú trong một container . Thông thường tôi sẽ thiết lập trang chính của mình với 4 khu vực nội dung: tiêu đề, tiêu đề, chính và tập lệnh. Tiêu đề, tiêu đề và đi chính nơi bạn mong đợi và khu vực tập lệnh nằm ở cuối phần thân.

Tôi đặt tất cả JavaScript của mình, bao gồm bất kỳ nội dung nào cho viewusercontrols, vào vùng chứa tập lệnh. Mã JavaScript dành riêng cho xem sẽ xuất hiện sau khi bao gồm. Tôi refactor chia sẻ mã trở lại kịch bản khi cần thiết. Tôi đã nghĩ về cách sử dụng một phương pháp điều khiển để đối chiếu kịch bản bao gồm, có nghĩa là, bao gồm nhiều kịch bản bằng cách sử dụng một yêu cầu duy nhất, nhưng đã không nhận được xung quanh đó, được nêu ra.

Điều này có lợi thế là giữ mã JavaScript riêng biệt để dễ đọc, nhưng cũng cho phép tôi dễ dàng chèn mô hình hoặc xem dữ liệu vào mã JavaScript khi cần.

+0

"Tôi muốn javascript để được tách ra khỏi những quan điểm." == "Cũng là một thực hành tốt để giữ javascript của bạn riêng biệt từ đánh dấu của bạn lên." <= và đó là vấn đề tại sao <%= foo %> sẽ không hoạt động. –

+0

Btw, tại sao gắn trình xử lý onclick trên JS onload là thích hợp hơn? –

+0

Tôi đã bỏ lỡ phần "do JS tạo" trong câu hỏi của bạn - chỉ cần quét ngay trên đó. Trong trường hợp này, tôi sẽ xem xét việc ghi dữ liệu đã bản địa hóa vào khung nhìn và tải javascript nó từ một đối tượng cục bộ. Sẽ viết lại. – tvanfosson

1

Nếu bạn khăng khăng giữ nó riêng biệt, bạn có thể làm một cái gì đó như:

//keep all of your localised vars somewhere 
var title = '{title_from_server}'; 
document.getElementById('someImage').title = title; 

Hãy nhớ rằng, nếu bạn sử dụng mã JavaScript để khởi tạo bất kỳ văn bản của các yếu tố, trang web của bạn sẽ làm suy giảm khủng khiếp nơi JavaScript không có sẵn .

+0

Chết tiệt ... Quên lại về khả năng thiếu hỗ trợ javascript. :( –

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