簡體   English   中英

當命名空間已存在時,Type.registerNamespace會拋出錯誤

[英]Type.registerNamespace is throwing errors when namespace already exists

在我的企業環境中,我們使用了大量的JavaScript。 為了簡化所有這些腳本的管理,並避免命名沖突,我們采用了命名空間的javascript命名約定,基本上是:

CompanyName.ProjectName.Area.XYZ.js

要創建名稱空間,我們使用以下模式:

var Company;
(function (Company) {
    (function (Project) {
        (function (Area) {
            (function (XYZ) {

                function function1(args) {

                },
                function function2(args) {

                }
            })(Area.XYZ|| (Area.XYZ = {}));

        })(Project.Area || (Project.Area = {}));
        var Area = Project.Area;
    })(Company.Project || (Company.Project = {}));
    var Project = Company.Project;
})(Company || (Company = {}));

哪個工作正常(實際上,這是TypeScript腳本的輸出)。

但是,我也有一些使用Microsoft Ajax命名空間函數的腳本,因為這是失控應用程序(javascript插件)所必需的。

我用這個聲明:

Type.registerNamespace('CompanyName.ProjectName.Area');
CompanyName.ProjectName.Area.ABC = function() {
}
CompanyName.ProjectName.Area.ABC.prototype = {
    function1 : function (args) {

    },
    function2 : function (args) {

    }
}

但是對Type.registerNamespace的調用會引發錯誤:

Sys.InvalidOperationException:Object Company已存在且不是命名空間

我怎樣才能恰當地結合這兩個世界? 如何解決我的問題並使警告消失?

  • 我無法控制腳本包含的順序,因為它是由應用程序動態生成的。

  • 我不想將整個代碼遷移到Microsoft的模式,因為它非常無用且難以閱讀。 當我遷移到打字稿時,我甚至無法控制命名空間輸出。

  • 我也不想引入一個替代命名空間來排除Ajax的命名空間,因為它會給所有團隊帶來一些混亂。

幾個月后......我終於不得不創建兩個獨立的命名空間。 一個用於MS Ajax剛性模型,一個用於自創名稱空間。

CompanyName.ProjectName.Area
CompanyNameAjax.ProjectName.Area

你能不能嘗試/抓住它?

try {
  Type.registerNamespace('CompanyName.ProjectName.Area');
} catch( e ) {
   //log it, or just ignore it..
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM