0

我是 Dojo 的新手,似乎找不到合适的文档或示例来说明如何完成我想要完成的工作。我正在创建一个决策树样式文档,该文档可以动态地将新选项添加​​到现有元素。该代码应在特定 DIV 的末尾添加一个新节点。为此,它必须找到名为 branchID 的元素的 value 属性。然后它将值加一并将新的 HTML 添加到页面中。在 jQuery 中,我会使用这个

$('#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 如何处理这样的事情?如果有人可以指出有关如何/为什么需要按照它的方式编写解决方案的文档,那将非常有帮助。

4

1 回答 1

0

我能够找到该问题的解决方案,但我不会删除该问题,而是提供有关我发现的内容的详细信息,以便其他人可能不会犯下真正的初学者级错误。问题是我在 require 语句之后编写函数定义的方式。函数定义要求指定 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 语句以及如何使用它并不完全清楚,所以我在最初的几次都错过了这个。

于 2012-10-06T14:50:27.127 回答