2013-01-24 19 views
10

hiểu biết của tôi là khi tôi chạyTiếp cận một thể hiện của một bộ điều khiển hoặc một cái nhìn trong ember

App.CheeseController = Ember.Controller.extend({ type:"brie"}); 

Một lớp CheeseController được tạo ra và khi tôi kích hoạt các tuyến đường Cheese một thể hiện của lớp đó được thực hiện đó là những gì tôi thực sự chạm vào khi nói chuyện với bộ điều khiển trong mẫu handlebars của tôi.

Có thể truy cập trực tiếp đối tượng được tạo từ trong bảng điều khiển javascript (hoặc từ bên trong chương trình của tôi) không? Nói chung, các đối tượng Ember tự động tạo ra ở đâu?

+7

Sử dụng ember-master (pre4), và cho ** chỉ mục đích gỡ lỗi **, bạn có thể truy cập vào bộ điều khiển bằng: 'App .__ container __. lookup ('controller: cheese')'. Nó cũng hoạt động với 'route: theRoute'. – louiscoquio

Trả lời

20

Lớp CheeseController được tạo và khi tôi kích hoạt tuyến đường Pho mát, thể hiện của lớp đó được thực hiện là điều tôi thực sự chạm khi nói chuyện với bộ điều khiển trong mẫu tay lái của tôi.

Có đó là chính xác những gì sẽ xảy ra. Ember tạo ra một thể hiện đơn lẻ của App.CheeseController và cung cấp nó như là bối cảnh khi biểu diễn mẫu handlebars của bạn.

Có thể truy cập trực tiếp mà đối tượng khởi tạo từ bên trong giao diện điều khiển javascript

Yes. Cách tốt nhất để làm điều này từ bảng điều khiển javascript là bằng cách sử dụng tay lái {{debugger}} trợ giúp từ mẫu của bạn. Thao tác này sẽ mở bảng điều khiển gỡ lỗi JS trong ngữ cảnh mẫu của bạn.

<script type="text/x-handlebars" data-template-name="cheese"> 
    {{debugger}} 
</script> 

Với debugger mở, bạn có thể truy cập vào bộ điều khiển singleton instantiated như this, vì vậy this.toString() nên trả lại một cái gì đó giống như <App.CheeseController:ember225>.

(hoặc từ trong chương trình của tôi)?

Phụ thuộc vào phần nào của chương trình của bạn

  • Từ một con đường: Sử dụng this.controllerFor('cheese')
  • Từ một mô hình: Số Xin đừng truy cập vào bộ điều khiển từ các mô hình.
  • Từ bộ điều khiển khác: Nếu bạn khai báo sự phụ thuộc trong bộ điều khiển khác, needs: ['cheese'] thì đơn vị App.CheeseController sẽ được truy cập từ bộ điều khiển khác thông qua thuộc tính controllers.cheese. Xem Automatically synthesize the controller 'needs' dependencies
  • Từ một mẫu: Sử dụng mảng needs để tuyên bố một sự phụ thuộc từ bộ điều khiển mẫu, sau đó từ bên trong mẫu của bạn điều khiển pho mát là tại địa chỉ: {{controllers.cheese}}

Nó cũng có thể truy cập vào dụ cheeseController qua thùng chứa ember, nhưng xin đừng. Vùng chứa không phải là một API công khai. Những cập nhật gần đây cho Ember đã làm cho việc truy cập nó hơi khó xử. Điều này là do sử dụng các hằng số toàn cục để truy cập các đóng gói phá vỡ các cá thể, và trong khi đó là tốt cho bàn điều khiển, nó nên tránh trong mã ứng dụng của bạn. Để biết thêm chi tiết, hãy xem App.container was not meant to be a public API

Thông thường, các đối tượng mà Ember tự động phát trực tiếp ở đâu? Bộ nhớ đệm trong bộ điều khiển nội bộ trong bộ chứa. Tất nhiên nó không phải là một phần của API công cộng, nhưng nếu bạn tò mò về cách làm việc trong nội bộ kiểm tra container_test.jsWhat is the purpose of the Ember.Container

+0

Nếu tôi chỉ muốn sử dụng bảng điều khiển trên ứng dụng đang chạy và không ngừng thực hiện ở giữa mẫu? –

+5

Trong trường hợp đó, bạn có thể truy cập một cá thể bộ điều khiển thông qua vùng chứa, như 'Tìm kiếm ___ container __. Tra cứu (" controller: posts ")'. Xem http://emberjs.com/guides/understanding-ember/debugging/#toc_view-ember-data-s-identity-map –

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