Tôi đã chơi xung quanh với cách thanh lịch nhất để làm điều này khi sử dụng Backbone với AMD (require.js). Đây là những gì tôi đã đưa ra, và như tốt nhất [cho đến nay].
Trước tiên, hãy khởi động lại dữ liệu trong, như được mô tả here.
index.htm (ứng dụng nhập điểm)
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script>
var require = {
config: {
// key name is module, value is data to give module
'models/Base': {
apiUrl: '/some/path/to/api',
}
}
}
</script>
<script data-main="js/main" src="vendor/require/require-jquery.js"></script>
</head>
<body></body>
</html>
Tiếp theo, xác định một lớp cơ sở cho các mô hình Backbone, như thế này:
js/mô hình/Base.js (chú ý module này tên khớp với tên mô-đun trong cấu hình ở trên)
define(['module', 'backbone'],
function(module, Backbone){
return Backbone.Model.extend({
getApiUrl: function(){
return module.config().apiUrl;
}
});
}
);
Cuối cùng, mở rộng tất cả mô hình Backbone của bạn từ cơ sở đó, như thế này:
js/mô hình/User.js
define(['models/Base'],
function(BaseModel){
return BaseModel.extend({
urlRoot: function(){
return this.getApiUrl() + '/user';
}
// ... more cool stuff here
});
}
);
Đây là tiếp tuyến có liên quan đến một earlier question I had về Backbone và Require.JS.
đọc liên quan: http://requirejs.org/docs/api.html#config-moduleconfig
Tôi không nghĩ rằng nó hoạt động. 'beforeSend()' được gọi sau khi yêu cầu đã được mở bằng url ban đầu. – mwhite
Đó chính xác là việc sử dụng 'beforeSend'; * beforeSend Type: Hàm (jqXHR jqXHR, PlainObject settings) Một hàm gọi lại yêu cầu trước có thể được sử dụng để sửa đổi đối tượng jqXHR (trong jQuery 1.4.x, XMLHTTPRequest) trước khi nó được gửi đi. Sử dụng tùy chọn này để đặt tiêu đề tùy chỉnh, v.v. Các đối tượng jqXHR và cài đặt được chuyển làm đối số. Đây là một sự kiện Ajax. Trả về false trong hàm beforeSend sẽ hủy yêu cầu. Kể từ jQuery 1.5, tùy chọn beforeSend sẽ được gọi bất kể loại yêu cầu. * –
Đó là trước khi yêu cầu được gửi nhưng sau khi nó được khởi tạo (với url hiện tại). Câu trả lời của tôi hoạt động chính xác. – mwhite