Tôi thích câu trả lời của Near Privman cho đến khi tôi gặp sự cố với việc ghi đè phương thức "siêu". Vì initialize()
không được gọi cho đến khi một số cách thông qua việc xây dựng một đối tượng Backbone, việc ghi đè có thể không xảy ra vào thời điểm cần thiết (nếu cần trước initialize()
).
Cụ thể, điều này có thể là vấn đề với parse()
. (. Không phải là một vấn đề đối với Views, nhưng chắc chắn cho bộ sưu tập và các mô hình) Với thiết lập này:
MyModel = Backbone.Model.extend({
initialize: function (options) {
this.parse = function (response, xhr) {
// parsing logic
};
// public & private vars/methods here
// and also initialize code
}
});
MySubModel = MyModel.extend({
initialize: function (options) {
this.parse = function (response, xhr) {
// override MyModel with my own parsing logic
}
// public & private vars/methods here
// and initialize code here
}
});
MySubModel.parse()
sẽ không bao giờ được gọi. Thay vào đó, tôi thấy rằng sử dụng IIFE thay vì khởi tạo() cả hai đều xóa vấn đề này và đọc sạch hơn là thực hiện một chức năng đã có mục đích cụ thể (initialize()
) thực hiện nhiệm vụ gấp đôi làm đóng cửa để xác định phần còn lại của lớp.
var MyModel = {};
(function() {
this.initialize = function (attributes, options) {
// initialize me
}
this.parse = function (response, xhr) {
// override at will
}
// other public & private vars/methods here
}).call(MyModel);
Backbone.Model.extend(MyModel);
Thật không may, điều này có cùng vấn đề với biến "riêng tư" được chia sẻ trên tất cả các trường hợp như cả câu trả lời của gilly3 và Near Privman. Rất thích nghe một cách không vụng về để biến các biến riêng tư thành có thể, nhưng có lẽ tôi nên từ bỏ nó và nhận ra tôi đang viết JavaScript ngay bây giờ, không phải Java/AS3/C++.
Ông có thể giải thích tại sao bạn đang cố gắng làm điều này? Không thực sự là một giải pháp thẳng tiến. – Gazler
không nhiều để giải thích appart từ làm thế nào tôi có thể thêm một tài sản tư nhân để xem. Ví dụ var myPrivate = "tài sản riêng" nhưng nó sẽ có sẵn cho toàn bộ khung nhìn giống như this.myPublic. Ngoại trừ this.myPublic có thể được truy cập từ cá thể xem. myPrivate chỉ có thể được truy cập từ bên trong các phương thức xem chính nó – Chapsterj
Xem câu trả lời này: http: // stackoverflow.com/questions/8924961/private-like-properties-in-models-hoặc-views-of-backbone-js –