2015-01-20 24 views
7

Làm cách nào để có thể truy cập mô hình từ bên trong bộ điều khiển? Hiện tại việc sử dụng đoạn mã dưới trả về một "undefined không phải là một hàm" (đi con số JS thất bại ...).Mô hình truy cập Ember bên trong bộ điều khiển

mô hình/plan.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name:  DS.attr('string'), 
    period:  DS.attr('number'), 
    price:  DS.attr('number'), 
}); 

tuyến/checkout.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model: function(params) { 
     return this.store.find('plan', params.plan_id); 
    } 
}); 

controllers/checkout.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    submitPayment: function(error, result) 
    { 
      var plan = this.get('model'); 
    } 
} 

router.js

Router.map(function() { 
    this.route('checkout', {path: '/checkout/:plan_id'}); 
}); 
+0

có thể 'this' không phải là bộ điều khiển trong 'submitPayment'. Gửi thanh toán là một hành động? Nếu vậy bạn nên đặt nó bên trong một đối tượng hành động. Hoặc kiểm tra các thông thường, là mô hình được lấy trong móc mô hình? – blessenm

+0

submitPayment chỉ là một chức năng được gọi từ bên trong một hành động. Có, mô hình đang được lưu trữ, không có vấn đề ở đó. –

+1

Thay vì mở rộng 'Ember.Controller', hãy thử 'Ember.ObjectController'. – blessenm

Trả lời

8

Tôi đã tìm ra nó cuối cùng. plan = this.get('model') hoạt động cho hành động. Nó trả về mô hình, và các thuộc tính có thể được truy cập với plan.get('price'). Không lý tưởng, nhưng nó hoàn thành công việc. Tại sao nó không hoạt động là bởi vì nó nằm bên trong một hàm được gọi là gọi lại từ bên trong hành động. Vì vậy, có lẽ phạm vi của "điều này" đã không được thực hiện cho chức năng gọi lại là tốt. Tôi đã di chuyển hàm gọi lại như một hàm bên trong bên trong hành động, sau đó phạm vi "này" đã hoạt động.

Đối với vấn đề phạm vi, đây là giải pháp setting an application controller variable to results returned from AJAX call

+0

Tôi không thể sử dụng this.get () bên trong bộ điều khiển. Ví dụ: xuất mặc định Ember.Controller.extend ({ mô hình: this.get ('model'), tin nhắn: this.model.message, .... .. – Vaibhav

+2

Đã phát hiện ra nó hoạt động như thế này trong bộ điều khiển: tin nhắn: Ember.computed.alias ('model.message'), ... – Vaibhav

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