2014-01-10 57 views
1

我似乎無法得到關於申報工作的道場例子。例如鏈接:http://dojotoolkit.org/reference-guide/1.9/dojo/_base/declare.html#id3道場 - 申報功能

這是我如何設置它:

/index.html:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js" data-dojo-config="async: true"></script> 
    <script src="/my/Employee.js"></script> 
    <script src="/my/Person.js"></script> 
    <script> 
     var dojoConfig = { 
      parseOnLoad: true, 
      packages: [{ 
       "name": "my", 
       "location": location.pathname.replace(/\/[^/]+$/, "") + "/my" 
      } 
      ] 
     }; 
    </script> 

    <script> 
     require(["my/Person"], function (Person) 
     { 
      var folk = new Person("phiggins", 42, "Tennessee"); 
     }); 

     require(['my/Employee'], function (Employee) 
     { 
      var matt = new Employee("Matt", 33, "California", 1000); 

      console.log(kathryn.askForRaise(), matt.askForRaise()); // 3600, 20 
     }); 
    </script> 
    <title></title> 
</head> 
<body> 

</body> 
</html> 

/my/Person.js

define(["dojo/_base/declare"], function (declare) 
{ 
    return declare(null, { 
     constructor: function (name, age, residence) 
     { 
      this.name = name; 
      this.age = age; 
      this.residence = residence; 
     } 
    }); 
}); 

/我的/僱員。 js

define(["dojo/_base/declare", "my/Person"], function (declare, Person) 
{ 
    return declare(Person, { 
     constructor: function (name, age, residence, salary) 
     { 
      // The "constructor" method is special: the parent class (Person) 
      // constructor is called automatically before this one. 

      this.salary = salary; 
     }, 

     askForRaise: function() 
     { 
      return this.salary * 0.02; 
     } 
    }); 
}); 

我tr ied在所有回調方法中設置一箇中斷點(return declare ...)並且它永遠不會進入那裏。它也不會進入require block的回調。

任何幫助表示讚賞

你會希望
+0

Dojo ...很少使用的很棒的框架...不公平 –

回答

1

您的HTML文件只有幾個小問題。

在加載Dojo的腳本標記中,您已添加data-dojo-config屬性。這是告訴Dojo它應該如何表現的兩種方法之一 - 另一種方法是定義一個全局的dojoConfig對象。你已經完成了兩個!因此,請刪除data-dojo-config屬性。

現在,Dojo只需在加載時知道配置對象。因此,必須在加載Dojo的腳本標記之前定義dojoConfig。由於async:true剛被刪除,所以將其添加到配置對象中。

另外,正如Buffalo所提到的,不需要在腳本標籤中包含Person和Employee模塊。 Dojo使用稱爲AMD(異步模塊定義)的模式來加載模塊。基本上就是你在這裏和那裏看到的definerequire函數。通過非常方便地爲您插入腳本標記(只要您告訴他們在dojoConfig中找到您的名稱空間的位置),就可以加載這些模塊。

所以你的頭的開頭應該是這樣的:

<script> 
    var dojoConfig = { 
     parseOnLoad: true, 
     async: true, 
     packages: [{ 
      "name": "my", 
      "location": location.pathname.replace(/\/[^/]+$/, "") + "/my" 
     }] 
    }; 
</script> 
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js"></script> 

這實際上是所有你需要做道場加載類,因爲它應該。不過,我認爲還有一個小問題值得你注意:

首先,你需要Person模塊。 Dojo將在幕後完成模塊加載魔法,並在完成後致電function(Person) {...}。接下來,您對Employee模塊也做同樣的事情,並致電function(Employee) {... }。你應該記住,你不能保證在function(Employee)之前調用function(Person)。例如,如果您加載了Person和100個其他模塊,則會首先調用function(Employee)。(我提到這個是因爲我懷疑凱瑟琳是一個打字錯誤,而你打算使用民間對象,現在我可以看到那可能不是這種情況,但我仍然會把它留在這裏)。

+0

工程就像一個魅力 – Steve

1

至少有一個變化是刪除線

<script src="/my/Employee.js"></script> 
<script src="/my/Person.js"></script> 

一個主要賣點的AMD模塊的是,你可以有可重複使用的模塊,而不需要在html文件的任何地方添加腳本標籤。

另一個調試技巧是檢查任何控制檯錯誤或網絡錯誤。