Trong mớiEmber.Router
có giao hàng với Ember 1.0-rc2, có thể thêm tuyến đường trong thời gian chạy không?Ember-Router: Làm thế nào để thêm một tuyến đường trong thời gian chạy trong Ember 1.0-rc2?
Trả lời
Hiện tại không có phương pháp hỗ trợ thực hiện việc này. Cuộc gọi App.Router.map
được xử lý bởi dòng 235-247 của mã này: bản đồ https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/system/router.js
Ember.Router.reopenClass({
map: function(callback) {
var router = this.router = new Router();
var dsl = Ember.RouterDSL.map(function() {
this.resource('application', { path: "/" }, function() {
callback.call(this);
})
});
router.map(dsl.generate());
return router;
}
được ghi đè mỗi khi bạn gọi Router.map
như gọi lại cho cuộc gọi trước để Router.map
không tồn.
Chỉnh sửa Tốt hơn hoặc tệ hơn, tôi có yêu cầu kéo để thay đổi hành vi để cho phép nhiều cuộc gọi đến App.Router.map
. Chúng ta sẽ xem chuyện gì xảy ra. Bạn có thể làm theo đây https://github.com/emberjs/ember.js/pull/2485
Một Sửa
Tôi đã viết một ý chính để làm những gì yêu cầu kéo của tôi làm trong Userland. Điều này sẽ cho phép bạn ánh xạ các tuyến đường khi chạy. Chỉ cần thêm đoạn mã này và sau đó thay thế các cuộc gọi của bạn để App.Router.map
với phương pháp mà tôi đã xác định
https://gist.github.com/grep-awesome/5406461
trả lời Thay đổi Chỉnh sửa
Tính đến yêu cầu kéo này, bây giờ bạn có thể gọi map
nhiều lần . https://github.com/emberjs/ember.js/pull/2892
Tôi thấy câu trả lời của wmarbut chưa được chấp nhận, nhưng đó là một câu trả lời hay (đối với tôi). Có vẻ như bản vá của anh ấy đang trên đường vào bản phát hành Ember, nhưng cho đến lúc đó, đây là một số mã sử dụng bản vá của anh ấy. (Không chấp nhận câu trả lời của tôi, tôi chỉ vui mừng khi đã tìm thấy điều này.) Tôi đang có kế hoạch sử dụng nó như là một phần của một giải pháp để cho phép điều hướng ổ đĩa nội dung. Câu hỏi hay, user1517325 và cảm ơn, wmarbut!
// was an all-in-one router map as Ember likes it
// App.Router.map(function() {
// this.resource("foods", function(){
// this.route("index", {path: "/"});
// });
// this.route("fourOhFour", { path: "*:"});
// });
//wmarbut's workaround until his patch is applied
App.map_routes = [];
App.MapRoutes = function(routes) {
App.map_routes.push(routes);
return App.Router.map(function() {
var route_lamda, _i, _len, _ref;
_ref = App.map_routes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
route_lamda = _ref[_i];
route_lamda.call(this);
}
return true;
});
};
//partial mapping
App.MapRoutes(function() {
this.resource("foods", function(){
});
});
//some more mapping
App.MapRoutes(function() {
this.resource("foods", function(){
this.route("index", {path: "/"});
});
});
//even more mapping
App.MapRoutes(function() {
this.route("fourOhFour", { path: "*:"});
});
Trong phiên bản mới nhất ember.js RC7 nó đã được bổ sung chức năng cho Router.map
để cho phép nó được gọi nhiều lần mà không cần bản đồ được ghi đè. Điều này sẽ cho phép các tuyến được thêm vào trong thời gian chạy.
Hy vọng điều đó sẽ hữu ích.
Kiểm tra bản chỉnh sửa mà tôi vừa thêm, nó cung cấp cho bạn giải pháp sẽ thả vào và hoạt động – wmarbut