2013-02-18 29 views
6

Tôi đang cố gắng tìm ra cách sử dụng một con sên (thuộc tính của mô hình của tôi) trong các tuyến đường ember của tôi để nhận các url sạch hơn.Sử dụng một con sên trong một tuyến đường emberjs

Tôi muốn rằng các tuyến đường của tôi trông như thế này:

http://www.server.com/#/newsitems/newsitem-title-in-slug-format/1 

Thay vì:

http://www.server.com/#/newsitems/1/1 

Như bạn thấy, tôi muốn thay thế id của newsitem với thuộc tính slug thực tế. Sau đây là cách mô hình Newsitem của tôi trông giống như:

App.Newsitem = DS.Model.extend({ 
    slug: DS.attr('string'), 
    title: DS.attr('string'), 
    summary: DS.attr('string'), 
}); 

Thuộc tính sên nhận một thuộc tính văn bản sạch ở định dạng này: title-in-slug-format

Đây là bản đồ router của tôi vào lúc này:

App.Router.map(function(){ 
    this.resource('newsitems', function(){ 
    this.resource('newsitem', {path:':newsitem_id'}); 
    }); 
}); 

tôi đã cố gắng thay thế newsitem_id bằng newsitem_slug nhưng điều này không hoạt động. Bất cứ một đề nghị nào khác?

Trả lời

8

nhờ Big Michael đã chỉ cho tôi đi đúng hướng. Nhưng, và tôi nghĩ rằng điều này là bởi vì tôi đang làm việc trong phiên bản rc-1 của ember, tôi đã không phải ghi đè lên móc mô hình cho việc này. Điều duy nhất tôi phải làm là:

App.NewsitemRoute = Ember.Route.extend({ 
    serialize: function(model, params) { 
    return { newsitem_id: model.get('slug') }; 
    } 
}); 
+0

hoạt động trong RC6, cảm ơn :) – j10io

2

Có một vài bước cần thiết để làm việc này. Trước tiên, bạn sẽ cần phải tùy chỉnh tuyến đường của mình để ghi đè móc mô hình:

App.NewsitemRoute = Ember.Route.extend({ 
    model: function(params) { 
    console.log("Searching for newsitem with slug: ", params.newsitem_id); 
    var newsitems = App.Newsitem.findQuery({ slug: params.newsitem_id }); 
    newsitems.one("didLoad", function() { 
     newsitems.resolve(newsitems.get("firstObject")); 
    }); 
    return newsitems; 
    } 
}); 

Trong ví dụ trên, chúng tôi truy vấn App.Newsitem cho bản ghi khớp với slug được chỉ định. Nó phức tạp hơn một tra cứu dựa trên id đơn giản vì chúng ta cần dịch mảng kết quả truy vấn thành một bản ghi duy nhất. Để xem chi tiết thêm về cách làm việc này, xem: how-to-find-a-model-by-any-attribute-in-ember-dot-js

Ngoài ra, bạn sẽ cần phải thực hiện serialize để ember linkto helper sẽ có thể tạo liên kết một cách chính xác

+0

Vì lý do nào đó móc móc mô hình 'không được gọi. Tôi không thấy 'console.log' xuất hiện trong bảng điều khiển của mình. Bất kỳ ý tưởng? (Gỡ lỗi cho tôi thấy rằng phương thức 'enter' của tuyến đường được gọi) – polyclick

+0

Lạ - bạn có thể đăng một ví dụ lên jsfiddle không? –

+0

Đây là: http://jsfiddle.net/bitshiftcop/MqS4G/1/ console.log trong 'NewsitemRoute' không được kích hoạt. – polyclick

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