Hãy tưởng tượng một mô hình xương sống đơn giản nhưBackbone.js - setters tùy chỉnh
window.model= Backbone.Model.extend({
defaults:{
name: "",
date: new Date().valueOf()
}
})
Tôi đang cố gắng để tìm một cách để luôn luôn làm cho các cửa hàng mô hình tên trong trường hợp thấp hơn-không phụ thuộc vào đầu vào được cung cấp. tức là,
model.set({name: "AbCd"})
model.get("name") // prints "AbCd" = current behavior
model.get("name") // print "abcd" = required behavior
Cách tốt nhất để làm điều này là gì? Dưới đây là tất cả tôi có thể nghĩ:
- Ghi đè các "thiết lập" phương pháp
- Sử dụng một "SantizedModel" mà nghe cho những thay đổi về mô hình cơ sở này và lưu trữ các đầu vào vệ sinh. Sau đó, tất cả mã xem sẽ được chuyển qua mô hình đã được vệ sinh này.
Ví dụ cụ thể "xuống thấp hơn" tôi đã đề cập về mặt kỹ thuật có thể được xử lý tốt hơn theo chế độ xem trong khi truy xuất nó, nhưng hãy tưởng tượng một trường hợp khác, trong đó, người dùng nhập giá trị vào Bảng Anh và tôi chỉ muốn lưu trữ các giá trị trong $ s trong cơ sở dữ liệu của tôi. Cũng có thể có các chế độ xem khác nhau cho cùng một mô hình và tôi không muốn phải thực hiện "toLowerCase" ở mọi nơi được sử dụng.
Suy nghĩ?
Cảm ơn. Tôi cũng xem xét điều này, nhưng điều này dường như lùi lại về mặt làm cho nó có thể đọc được - ghi đè hàm thiết lập hoặc thêm hàm setProperty mới đặt trong chữ thường và sau đó chuyển nó vào bộ xương sống có thể tốt hơn. Trừ khi tôi đang thiếu một cái gì đó? – Naren
Chắc chắn không có gì sai với việc ghi đè phương thức 'set' để hoàn thành những gì bạn cần làm ... một số tiền xử lý trước khi thiết lập? Bạn thậm chí có thể xem xét mở rộng 'Backbone.Model.prototype.set' để gọi một số bộ xử lý trước nếu chúng khớp ... một cái gì đó như thế này: https://gist.github.com/1310972 –
xác thực chỉ được gọi cho phương thức lưu hoặc nếu options.validate = true được đặt. (im lặng không được sử dụng ở đây, nhưng câu trả lời là khá cũ) – webstrap