2012-10-05 37 views
0

我是Dojo的新手,似乎無法找到適當的文檔或示例來說明如何完成我正在嘗試完成的任務。我正在創建一個決策樹樣式文件,動態地向現有元素添加新選項。代碼應該在特定DIV的末尾添加一個新節點。爲此,它必須找到名爲branchID的元素的value屬性。然後它將該值增加1,並向頁面添加新的HTML。在jQuery中,我會用這個Dojo - 在其他Dojo函數中使用getAttr

$('#btnAddFork').click(function(){ 
    var branchID = $('#branchID').attr('value'); 
    var newNodeHTML = "<div class='node'>new node #" + (++n) + "</div>'; 
    $('div#NodeDIV').append(newForkHTML); 
}); 

這個代碼在概念的我之前創建的需求的變化強迫我使用不同框架的證明。我正在Dojo嘗試以下操作:

require(["dojo/dom-construct", "dojo/dom", "dojo/dom-attr", "dojo/on", "dojo/domReady!"], 
function(domConstruct, dom, on){ 
    on(dom.byId("btnAddFork"), "click", function(){ 
    var n = domAttr.get("branchID", "value"); 
    domConstruct.place("<div class='node'>new node #" + (++n) + "</div>", "NodeDIV"); 
    }); 
}); 

Dojo代碼正在死於我試圖爲n賦值的行。錯誤消息是「TypeError:對象不是函數」。錯誤消息並未指出我尋找解決方案的正確方向。我確信這是我使用domAttr.get函數獲取值的方式,但我似乎無法找到使其按照我期望的方式工作的方式。 Dojo如何處理這樣的事情?如果有人能夠指出如何/爲什麼需要按照它的方式編寫解決方案,那麼這將非常有幫助。

回答

0

我能找到這個問題的解決方案,但我不提供這個問題,而是提供關於我發現的內容的細節,以便其他人可能不會做出真正的初學者級錯誤。問題在於我在require語句之後編寫函數定義的方式。函數定義需要指定每個項目的要求(除了domReady!因爲它是加載程序的輔助函數)。我在閱讀文檔時錯過了這個小型的詳細信息。以下代碼完全按照預期工作。

require(["dojo/dom-construct", "dojo/dom", "dojo/on", "dojo/dom-attr", "dojo/domReady!"], 
function(domConstruct, dom, on, domAttr){ 
    on(dom.byId("btnAddFork"), "click", function(){ 
    var n = domAttr.get("branchID", "value"); 
    domConstruct.place("<div class='node'>new node #" + (++n) + "</div>", "NodeDIV"); 
    domAttr.set("branchID", "value", n); 
    }); 
}); 

請注意,在工作代碼中,我將domAttr添加到函數定義中。一旦我讀完domAttr的所有文檔,大概是第四次或第五次,我意識到我沒有將它添加到函數定義中。我讀過的Dojo文檔並不完全清楚如何構建require語句以及如何使用它,所以我前幾次錯過了這一點。