0

これは、この質問のフォローアップです。

だから私はこのAMD以前のdojoコードを持っています:

dojo.require(...);
dojo.provide("abc.def.foo");
som.var.iable = {A:1,B:2};
som.var.iable2 = {C: 3, D:som.var.iable.B}
dojo.declare("blah",[],{
     //code based on the above variables
});

AMDの場合、これと前のリンクを読んだ後、私はこのようなことを試みています

som.var.iable = {A:1,B:2};
som.var.iable2 = {C: 3, D:som.var.iable.B}

define([
    "dojo/_base/declare", 
], function(declare){
   return declare("abc.def.foo", null {               
   });
});

define([
    "dojo/_base/declare", 
], function(declare){
   som.var.iable = {A:1,B:2};
som.var.iable2 = {C: 3, D:som.var.iable.B}
   return declare("blah", null {
        //code based on the above variables
   });
});

のようなオブジェクト構造がないため、明らかにこれは失敗しますsom.var.iable。できますが、私の質問は、レガシー コードでどのように機能したかということです。そして、正しいAMDの同等物は何でしょうか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

OK、あなたがやろうとしていることについての私の仮定は次のとおりです。

  1. プロパティで呼び出されるグローバル変数は実際には必要ありません。これは、物事を整理する方法にすぎませんsomevar
  2. some/var/iable、、、some/var/iable2およびの 3 つのモジュールが必要ですblah。これは、3 つのファイルと 3 つのdefine()呼び出しを意味します。
  3. どちらsom.var.iablesom.var.iable2実際の継承可能なクラスではありません。それらは単なる古いオブジェクトです...したがって、使用するだけでblah済みますdeclare()

som/var/iable.jsしたがって、プレーン オブジェクトを提供するfile を作成する必要があります。

define([
],
function(){
    return {A:1,B,2}
});

もう 1 つsom/var/iable2.jsは、プレーンなオブジェクトを提供するモジュールです。

define([
    "som/var/iable",
],
function(iable){
    return {C: 3, D:iable.B}
});

blah.js次に、Class-object を提供する3 番目のモジュール:

define([
    "dojo/_base/declare",
    "som/var/iable2"
],
function(declare,iable2){
    var parentClasses = [];
    var clazz =  declare(parentClasses, {
        constructor : function(){
            // No need for this.inherited(arguments) in this particular case          
            alert("Welcome to the constructor. Did you know that iable2.D is "+iable2.D+"?");   
        },

    });
    return clazz;
});

これをすべてテストしたわけではありませんが、最終的に配置したいページで開始するには:

require(["blah",dojo/domReady!"], function(blah){
    var b = new blah();
});

Dojo は、次のようなアラートを受け取るように、すべてを順番にロードする必要があります。

コンストラクタへようこそ。iable2.D が 2 であることをご存知ですか?

于 2013-10-24T18:35:39.423 に答える