2016-02-25 16 views
10

Có thể truy cập mô hình tuyến đường bên trong hành động tuyến đường không?Ember - Cách lấy mô hình tuyến đường bên trong hành động tuyến đường

tôi đi qua nhiều đối tượng bên trong một mô hình đường đến mẫu,

model: function() { 
    return { 
     employeeList : this.store.findAll("employee"), 
     employee : Ember.Object.create() 
    } 
} 

Từ hành động tuyến đường tôi muốn thay đổi model.employee tuyến. Tôi đã thử những điều sau đây, nhưng tôi không nhận được đối tượng.

actions:{ 
    editAction : function(id) { 
     var emp = this.get("model"); 
     console.log(emp.employee); 

    } 
} 

Mọi người có thể đưa ra giải pháp để nhận và sửa đổi đối tượng mô hình (nhân viên) không?

+2

'emp.get ('employee');' và nhân viên của bạn không phải là một ví dụ của mô hình nhân viên, nếu bạn muốn một mô hình nhân viên trống sử dụng 'this.store.createRecord ('employee', {}); ' –

+0

Tôi đã thử emp.get ('employee'), nhưng đang cho TypeError: emp.get không phải là một hàm –

+1

Miguel bao quát mọi thứ cần được bảo vệ ^^ –

Trả lời

25

Vấn đề đầu tiên là bạn nên trả lại lời hứa từ móc mẫu. Bằng cách đó, quá trình chuyển đổi sẽ chờ đợi lời hứa giải quyết. return { /*...*/}; trả về một đối tượng và không phải là một lời hứa, ngay cả khi chính đối tượng đó chứa lời hứa. Các giải pháp là sử dụng Ember.RSVP.hash như:

model() { 
    return Ember.RSVP.hash({ 
    employeeList: this.store.findAll('employee'), 
    employee: Ember.Object.create() 
    }); 
} 

này sẽ trả về một lời hứa mà giải quyết khi tất cả những lời hứa bên quyết tâm.


Vấn đề thứ hai là bạn không thể sử dụng this.get('model') trong một tuyến đường. Nếu bạn nghĩ về nó, thuộc tính model là bản thân móc và không phải là mô hình được giải quyết. Giải pháp:

  1. Hành động đó được gửi từ bộ điều khiển/mẫu. Bạn không thể vượt qua mô hình như một tham số? Bằng cách đó bạn có thể truy cập vào mô hình thông qua các đối số hàm.
  2. Nếu bạn hoàn toàn cần, this.modelFor(this.routeName); trả về mô hình cho tuyến đường hiện tại.
  3. Bạn có thể truy cập mô hình trên tuyến đường qua bộ điều khiển như this.controller.get('model').
  4. Bạn cũng có thể triển khai móc setupController và truy cập ở đó mô hình. Sau đó, bạn có thể làm những việc như this.set('employeeModel', model); để truy cập sau này.
+0

Cảm ơn miguelcobain. Nó đã làm việc. –

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