2012-04-22 14 views
6

Tôi đã lập trình trong Javascript một thời gian. Gần đây tôi đã tạo một dự án jQuery khá lớn và áp dụng Mô-đun mô-đun như được mô tả trong bài viết tuyệt vời này: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-DepthLàm cách nào để mở rộng các không gian tên với EmberJS

Điều này hoàn toàn tốt đẹp và mã trông mượt mà và dễ quản lý, nhưng tôi cảm thấy nó có thể tốt hơn. Tôi đã dành cả ngày để tìm kiếm đối với một số khuôn khổ Javascript, chủ yếu là những người mà: hỗ trợ ràng buộc

  • Có UI
  • Có một hệ thống khuôn mẫu
  • thể làm việc với jQuery
  • Giúp tôi tổ chức mã của tôi trong một cách tương tự như tôi đã làm với mô hình mô-đun

Tôi đã tình cờ gặp các khuôn khổ như AngularJS, KnockOutJS, SpineJS, JavascriptMVC, v.v. Một trong những thực sự gắn bó - và được đánh giá cao - là EmberJS.

Tôi quyết định cho nó một cảnh quay, nhưng nó không dễ dàng. Tính sẵn có của hướng dẫn cho EmberJS rất hạn chế. Sau khi cố gắng một thời gian dài, tôi đã xoay sở để có được một số thứ đang chạy và tôi thích những gì EmberJS làm! Chỉ có một điều tôi dường như không thể hiểu - đó cũng là câu hỏi của tôi: Làm cách nào để mở rộng vùng tên Ember (được tạo bằng Ember.Application.create)?

Để biết rõ: Phiên bản cũ của dự án của tôi có vùng tên lõi và không gian tên Util. Cả hai đều chứa các chức năng tương ứng mà tất cả các lớp khác có thể sử dụng. Làm thế nào tôi có thể có một không gian tên Core và Util với các hàm trên đầu của vùng tên ban đầu?

Tôi chỉ làm:

MyNamespace = Ember.Application.create(); 
MyNamespace.Core = Ember.Application.create(); 
MyNamespace.Util = Ember.Application.create(); 

Hoặc cái gì khác?

Trả lời

10

Bạn không thể làm tổ Ember.Namespace (trong đó Ember.Application là một phân lớp của Ember.Namespace), xem số phát hành #683.

Tome Dale, một trong những người đóng góp cốt lõi, đã thêm một câu trả lời thú vị về cách bố trí các ứng dụng phức tạp, xem comment.

Vì vậy, bạn có thể chỉ cần sử dụng App = Ember.Application.create() và tạo bộ điều khiển, chế độ xem, v.v ... trong không gian tên này. Hoặc bạn có thể - nếu bạn có ý định sử dụng lại một số mã trong các dự án khác/ứng dụng - chia của không gian tên như thế này:

Util = Ember.Namespace.create({ 
    importantNames: 'Einstein'.w() 
}); 

Core = Ember.Namespace.create({ 
    sqrt: function(x) { return Math.sqrt(x); } 
}); 

App = Ember.Application.create(); 

... 

App.myListController = Ember.Object.create({ 
    importantNamesBinding: 'Core.importantNames', 
    sqrtBinding: 'Util.sqrt' 
}); 

Một Ember.Application kéo dài Ember.Namespace, và thêm chức năng về xử lý sự kiện (nhấp chuột, ...). Công cụ này hữu ích khi bạn viết một ứng dụng có chế độ xem - trong không gian tên CoreUtil của mình, bạn sẽ không cần nội dung đó, đó là lý do tại sao đây là chỉ một Ember.Namespace.

+0

Lúc đầu, cảm ơn bạn đã trả lời nhanh chóng, rất chi tiết. Thứ hai, tôi không thực sự quan tâm đến các không gian tên không lồng nhau, tôi chỉ đang tìm kiếm hàm gọi đúng để tạo ra một đối tượng giống như không gian tên, mà Ember.Namespace.Create là! Nếu có bất cứ điều gì, tôi có thể đã đi với phương pháp mô hình mô-đun của tôi để có các không gian tên (có thể lồng nhau hay không) trên đầu trang của một ứng dụng Ember, nhưng đó chỉ là bẩn. –

+0

Sau khi thử nó, tôi phát hiện ra không gian tên làm tổ thực sự hoạt động. Có lẽ nó đã thay đổi trong một phiên bản gần đây do nhu cầu phổ biến? –

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