Tôi muốn tạo đối tượng javascript từ mẫu. Vấn đề là tôi không biết mẫu sẽ trông như thế nào trước đây. Như một ví dụ đơn giản, nếu tôi đã có mẫu chức năngTạo đối tượng Javascript từ mẫu
template = function (data) {
return {
title: data.title
}
}
sau đó tôi có thể chạy template({ title: "Steve" })
và lấy lại đối tượng
{ title: "Steve" }
Vì data.title
không được đánh giá cho đến khi tôi gọi là mẫu chức năng. Nhưng tôi đang xây dựng một đối tượng dựa trên đầu vào của người dùng, nơi các tên trường không được biết trước và có thể được lồng sâu ở bất cứ đâu trong đối tượng.
Nếu tôi xác định đối tượng được trả về trước thì trường data.title
trong ví dụ này đã được đánh giá và sẽ không sử dụng dữ liệu đầu vào. Ví dụ, tôi muốn để có thể xác định các mẫu đối tượng như
obj = { title: this.title }
sau đó xác định lại mẫu như
template = function() {
return obj
}
và gọi template.call({title:"Steve"})
. Nhưng hiện nay tôi nhận được lại
{ title: undefined }
vì this.title
đã được đánh giá khi tôi định nghĩa obj
. Có lẽ tôi đang tiếp cận điều này sai, bởi vì tôi tiếp tục đi đến kết luận rằng tôi phải sửa đổi hàm bằng cách xâu chuỗi nó, sửa đổi chuỗi để bao gồm mã chưa được đánh giá this.title
và tạo một hàm mới từ chuỗi. Nhưng điều đó có vẻ giống như một ý tưởng khủng khiếp đơn giản.
Và vượt qua đối tượng tìm kiếm các giá trị đặc biệt để thay thế có vẻ tốn kém và phức tạp. Tôi cũng tìm một số loại thư viện JavaScript đối tượng khuôn mẫu nhưng không tìm thấy bất cứ điều gì.
EDIT: Để làm cho nó rõ ràng hơn rằng các dữ liệu đầu vào và các cấu trúc mẫu sẽ không nhất thiết phải phù hợp với, tôi có thể muốn có một mẫu mà trông giống như
template = function (data) {
return {
name: "Alfred",
stats: {
age: 32,
position: {
level: 10,
title: data.title
}
}
}
}
và gọi template({title:"Manager"})
để có được
{ "tên": "Alfred", "số liệu thống kê": { "tuổi": 32, "vị trí": { "cấp độ": 10, "title": "Người quản lý" } } }
http://api.jquery.com/jquery.extend/ – setec
Cảm ơn nhưng có lẽ tôi nên rõ ràng hơn: vấn đề với điều này là t dữ liệu đầu vào của anh ta sẽ không khớp với cấu trúc của mẫu. Các giá trị đầu vào có thể phải được đặt trong một phần lồng nhau sâu sắc của đối tượng hoặc nhiều lần trong cùng một đối tượng. Tôi sẽ không "biết" nó trông như thế nào khi tôi gọi hàm mẫu. –