2012-06-25 28 views
5

Tôi có khả năng nào khác để xử lý với các bộ điều khiển và chế độ xem Ember.Router? Cấu trúc ứng dụng của tôi thường phụ thuộc vào require.js, nó phụ thuộc vào các phụ thuộc tương ứng.Làm thế nào tôi có thể đặt ApplicationController trong Ember.Router

Trong ví dụ của tôi, tôi đang làm điều App.ApplicationController làm bộ điều khiển bộ định tuyến chính.

Dưới đây là một jsfiddle: http://jsfiddle.net/mediastuttgart/uMKGt/1/

Nhưng có bất kỳ cơ hội để thiết lập này bằng tay? Tôi đã tìm thấy thông báo cam kết này https://github.com/emberjs/ember.js/commit/be69395f5eec4187b1df052d7386bcda45f79475 nơi tôi có thể thấy, cách đặt bộ điều khiển và xem thủ công (dù sao cũng không thể làm việc này). Nhưng không thể tìm thấy bất kỳ ví dụ như:

App = Ember.Application.create(); 

App.MyController = Ember.Controller.extend({}); 
App.MyView = Ember.View.extend({}); 

Router = Ember.Router.extend({ 
    applicationController : App.MyController, 
    root : Ember.Route.extend({ 
     index : Ember.Route.extend({ 
      route : '/', 
      connectOutlets : function (router) { 
       router.get('applicationController').connectOutlet(App.MyView); 
      } 
     }) 
    }), 
    ... 
}); 

EDIT

Tôi đang cố gắng để giải thích điều này hơn một chút trong từng chi tiết. Trong khi chúng tôi sử dụng require.js để quản lý hoặc phụ thuộc, chúng tôi có nhiều bộ điều khiển chịu trách nhiệm cho các phần của riêng họ trong toàn bộ ứng dụng. Giả sử chúng ta có một mẫu đăng ký bản tin. Bộ điều khiển sử dụng cho kịch bản này được cấu trúc theo

- app 
-- controller 
--- newsletter 
---- signup.js 
--- cart 
--- checkout 
-- view 
-- model 
-- router 
-- template 

Như chúng ta đã sử dụng một chức năng tùy chỉnh để tạo ra không gian tên Em.Provide('App.Controller.Newsletter'); mà tạo ra một đối tượng tại App.Controller.Newsletter. Đối tượng này hiện là cơ sở điều khiển cho toàn bộ ứng dụng bản tin của chúng tôi. Bắt đầu với App.Controller.Newsletter.Signup = Ember.Controller.extend({});, chúng ta cần truyền vào ví dụ này là "ApplicationController" cho router. Như bạn có thể thấy, chúng tôi không thể chỉ sử dụng App.ApplicationController để khởi tạo bộ điều khiển cho Ember.Router.

Trả lời

9

Không biết gì về requirejs, nhưng tôi nghĩ điều duy nhất là để xác định một

App.ApplicationController = Ember.Controller.extend({...behavior here...}) 

và sau đó, khi gọi

App.initialize() 

Khung sau đó sẽ bơm tự động điều khiển này trong bộ định tuyến.

+6

N.B. Việc đặt tên là quan trọng ở đây. Ember tìm kiếm một ApplicationController trong không gian tên ứng dụng của bạn. nếu câu hỏi ban đầu đã sử dụng thay vì MyApplicationController thì nó sẽ hoạt động tự động. –

+0

@BradleyPriest Tôi nên viết điều này ... –

+0

Cảm ơn bạn đã trả lời. Tôi đã cập nhật câu hỏi của mình với nhiều chi tiết hơn. –

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