2015-02-20 33 views
7

Tôi chỉ đang học Ember.js và chạy vào một chút xíu. Tôi có một Dịch vụ mà tôi muốn gọi một phương pháp khác mà tôi đã xác định trong cùng một đối tượng, như vậy:Phương thức gọi từ phương thức khác trong Dịch vụ Ember

export default Ember.Service.extend({ 
    myMethod: function() { ... }, 

    otherMethod: function() { 
    this.myMethod(); // <---- this doesn't work 
    this.get('myMethod')(); // <---- also doesn't work 
    Ember.run.bind(this, this.myMethod)() // <---- no dice 
    } 
}); 

Có cách nào để làm điều này không? Tôi rất muốn sử dụng lại mã trong codebase của tôi.

Cảm ơn.

+0

Câu hỏi của bạn thực sự ngắn về bất kỳ loại chi tiết nào, ví dụ: cách bạn khởi tạo và gọi 'myMethod()' trên dịch vụ của bạn. Tuy nhiên, bạn không nên mở rộng 'Ember.Service' nhưng' Ember.Object', và bạn nên khởi tạo nó một cách chính xác: http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/ – Leeft

+0

... đây là một phần của khóa đào tạo Ember, vì vậy tôi chỉ làm như thế nào họ đang nói với tôi rằng tôi nên làm. Tôi không chắc chắn các loại chi tiết khác là cần thiết. Tôi có nên gọi phương thức của một vật thể từ bên trong nó không? – Jason

+0

Giả sử bạn đang tạo một số loại đối tượng mới với lớp này, và sau đó gọi 'serviceObject.otherMethod()' bạn sẽ không gặp vấn đề gì khi thực hiện điều đó. Không có gì trong mã bạn đã cho thấy sẽ cấm điều này, vì vậy nó phải là cách bạn tạo hoặc sử dụng nó. – Leeft

Trả lời

2

Tôi đoán rằng bạn đã tiếp tục từ thời điểm này. Nhưng đây là một câu đố ember chỉ trong trường hợp chứng minh làm thế nào một dịch vụ có thể tham khảo các phương pháp riêng của nó. Giống như nó đã được nói trong các ý kiến, đó là một điều javascript về this.

https://ember-twiddle.com/7caf29fe1df7f36e6e3e49578fc3aed3?openFiles=services.movie-service.js%2Ctemplates.components.movie-viewer.hbs

+0

Tôi biết điều này là cũ, nhưng làm thế nào tôi sẽ làm cho công việc này twiddle? Về cơ bản, tôi đã thêm một hàm gọi, 'displayMovies()', vào hành động bạn đã thực hiện trong câu đố của bạn https://ember-twiddle.com/27aebdeb9ab75841ee16b3dbd8df3f76?openFiles=services.movie-service.js%2Ctemplates.components.movie-viewer .hbs – mk2

+1

Xin chào @MarcusRenno, nếu tôi đọc chính xác câu đố của bạn, bạn muốn kích hoạt hiển thị phim bằng dịch vụ phim. Tôi sẽ khuyên bạn nên chống lại nó. Các dịch vụ phim là một singleton và có thể sống lâu hơn các thành phần bạn có kế hoạch để hiển thị mọi thứ trên, hoặc bạn có thể muốn chia sẻ nó giữa các thành phần khác nhau. Thay vào đó, lưu trữ dữ liệu với dịch vụ và tiêu thụ nó với các thành phần có lẽ là đặt cược tốt nhất của bạn – shane

+1

Đó là một gợi ý tốt, nhưng vấn đề tôi đã cố hỏi là khác nhau. Hàm displayMovies vừa được tạo ra để cố gắng sử dụng một hàm trong một hàm khác trong trường hợp một hàm bắt đầu lớn. Tôi muốn giữ các chức năng riêng biệt để dễ đọc/bảo trì hơn – mk2

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