2013-04-10 28 views

Trả lời

4

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

1

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: "*:"}); 
    }); 
1

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.

Các vấn đề liên quan