2012-12-13 23 views
7

Tôi tự hỏi nơi để thêm các biến toàn cầu cho một ứng dụng ExtJS. Tôi đã xem xét một số đề xuất trong stackoverflow đề cập rằng bạn có thể thêm chúng bên trong app.js. Nhưng, bất cứ ai có thể cụ thể hơn? Ứng dụng của tôi trông giống như sau:Nơi để thêm các biến toàn cầu trong ExtJS MVC?

Ext.application({ 

    launch: function() {..} 

}); 

Vì vậy, chính xác các biến sẽ đi đâu? Trong chức năng khởi chạy? Bên ngoài Ext.application?

+0

Related: http://stackoverflow.com/questions/9261458/where-should-i-define-global-functions-in-extjs-4-mvc – Qtax

Trả lời

6

Khai báo không gian tên đối tượng riêng của bạn và thêm chúng ở đó:

Ext.ns('My.Application.Globals'); 

My.Application.Globals.SomeValue = 5; 
My.Application.Globals.SomeText = 'Hello World!'; 

Tuy nhiên, các hình cầu thường được cau mày khi không cần thiết, vì vậy hãy thử và sử dụng chúng nếu bạn có thể.

+0

Đề xuất tốt :) – LPD

2

Bên cạnh bất cứ tính năng có thể được xây dựng thành Ext, bạn luôn có thể sử dụng một chức năng ngay lập tức tạo ra một đóng cửa:

(function(){ 
    var globalVariable = 'foo';  

    Ext.application({ 

     launch: function() { alert(globalVariable); } 

    }); 

})(); 
+0

@ alex23 - ** Có **. Bất kỳ hàm nào được tạo trong 'Ext.application' * đóng trên * bất kỳ biến nào được khai báo trong hàm ẩn danh bên ngoài đó. –

+1

Bạn cần var. Nếu bạn thả var thì toàn bộ điểm đóng cửa là tranh luận. – Lloyd

+0

@ alex23 - ý bạn là gì 'var là theo mặc định từ khóa 'riêng tư'? Điều đó không thực sự có ý nghĩa gì trong JavaScript. –

3

Tôi biết bạn đã chấp nhận câu trả lời là tốt. Tôi chỉ muốn thêm một cách MVC để bao gồm các biến không gian tên có sẵn cho ứng dụng. Có một báo trước cho các 'globals' này - bạn không thể sử dụng chúng trong các định nghĩa lớp của bạn. Có nghĩa là bạn không thể tham chiếu ứng dụng của mình theo phương thức Ext.define({}). Chúng phải được sử dụng theo phương thức initComponent hoặc mới hơn.

Vì vậy, đây là những gì tôi làm:

Ext.application({ 
    name:'MyApp', 
    appFolder:'js/app', 
    controllers:[ 'Main' ], 
    autoCreateViewport : true, 
    launch:function() { 
     console.log("App Launched!"); 
     MyApp.app = this; //added this to get reference to app instance. IMPORTANT!  
    }, 
    //variables used throughout the app 
    globals:{ 
     myURL:'http://example.com', 
     magicNum:5 
    } 
}); 

Để sử dụng các biến rộng ứng dụng mà bạn tham khảo không gian tên ứng dụng của bạn và do đó, không gây ô nhiễm không gian toàn cầu. Như thế này:

MyApp.app.gloabals.magicNum 
10

Cách tiếp cận tốt hơn là tạo một lớp riêng biệt để giữ các hằng số toàn cục như vậy. Sau đó, bạn chỉ nên đặt các hằng số đó là yêu cầu trong app.js.

Ext.define("App.Constants", { 
     singleton : true, 

     BASE_URL : "http://localhost:8080/", 
     LABLE_HEADER : "geekrai.blogspot", 
     TIMEOUT : 6000 
}); 

Điều này sẽ đảm bảo rằng lớp học được tải và bây giờ bạn có thể truy cập bất kỳ thuộc tính/giá trị toàn cầu nào. Tôi đã đề cập chi tiết như vậy trên blog của mình: link

+0

Bài đăng trên blog của bạn đã giúp tôi. Cảm ơn bạn! Sẽ ổn nếu bạn đặt mã ngay tại đây - trong câu trả lời. –

+0

chắc chắn, tôi cũng có mã :) –

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