2013-02-05 33 views
37

Tôi đã sau cấu trúc đườngLàm cách nào để truy cập mô hình gốc trong một tuyến chỉ mục lồng nhau bằng cách sử dụng ember.js?

App.Router.map(function(match) { 
    this.route("days", { path: "/" }); 
    this.resource("day", { path: "/:day_id" }, function() { 
     this.resource("appointment", { path: "/appointment" }, function() { 
      this.route("edit", { path: "/edit" }); 
     }); 
    }); 
}); 

Khi tôi bên trong AppointmentIndexRoute Tôi đang tìm kiếm một cách để tạo ra một mô hình mới sử dụng một số ngày meta từ ngày người mẫu (mẹ) nhưng vì mô hình ngày chưa biết về cuộc hẹn này, tôi không chắc chắn cách liên kết chúng cho đến khi cuộc hẹn được tạo/và cam kết bị sa thải.

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao

Trả lời

41

Từ bên trong AppointmentIndexRoute của mô hình móc bạn có thể sử dụng modelFor ('ngày') để truy cập mô hình mẹ. Ví dụ:

App.AppointmentIndexRoute = Ember.Route.extend({ 
    model: function(params) { 
    day = this.modelFor("day"); 
    ... 
    } 
}); 

Một ví dụ khác là ở đây: emberjs 1.0.0pre4 how do you pass a context object to a resource "...Index" route?

+0

Tôi thích nó khi đó là điều đơn giản cho câu trả lời cực nhanh! –

+9

lưu ý rằng bây giờ (Ember 2.0) bạn cần phải sử dụng đường dẫn đầy đủ của tuyến đường, do đó, nó sẽ là 'this.modelFor ('days.day')' – andorov

+0

@andorov Tôi có thiếu cái gì? Nó không giống như tuyến đường ngày được lồng dưới ngày. Họ là anh chị em. – LukeP

2

gì nếu tôi không sử dụng dữ liệu ember? Làm thế nào để tôi nhận được id cha mẹ trong một lộ trình như

this.resource('workspace',function() { 
    this.resource('workflow', {path: '/:workspace_id/workflow'}, function() { 
     this.route('show', {path: '/:workflow_id'}); 
    }); 
    }); 

Mã này sẽ không hoạt động:

App.WorkflowShowRoute = Em.Route.extend({ 
    model: function(params) { 
     var ws = this.modelFor('workspace'); //ws is undefined 
     return this.store.find('workflow', params.id, ws.id); 
    } 
}); 

EDIT: Tôi tìm thấy một workaround, nó không phải là lý tưởng nhưng hoạt động chính xác cách tôi muốn nó .

this.resource('workspace',function() { 
    this.route('new'); 
    this.route('show', {path: '/:workspace_id'}); 
    //workflow routes 
    this.resource('workflow', {path: '/'}, function() { 
     this.route('new', {path:'/:workspace_id/workflow/new'}); 
     this.route('show', {path: '/:workspace_id/workflow/:workflow_id'}); 
    }); 
    }); 

Và trong lộ trình công việc của tôi, tôi có thể truy cập vào jus workspace_id như tôi mong đợi từ các tài sản params:

App.WorkflowShowRoute = Em.Route.extend({ 
    model: function(params) { 
     return this.store.find('workflow', params.workflow_id, params.workspace_id); 
    } 
}); 

Cuối cùng, đây là link-to của tôi bên trong helper đường workspace.show:

{{#each workflow in workflows}} 
    <li> 
    {{#link-to 'workflow.show' this.id workflow.id}}{{workflow.name}}{{/link-to}} 
    </li> 
{{/each}} 
+0

bạn đang lưu trữ dữ liệu của mình ở đâu (nếu bạn không sử dụng kho lưu trữ dữ liệu ember)? bạn có bản đồ nhận dạng gia đình hay thứ gì đó tương đương? –

+0

Tôi đã tạo cửa hàng của riêng mình bằng cách sử dụng kỹ thuật này tại đây http://eviltrout.com/2013/03/23/ember-without-data.html – Emad

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