我是Dojo的新手,似乎无法找到关于如何做我想要完成的事情的相应文档或示例。我正在创建一个决策树样式文档,它可以动态地向现有元素添加新选项。代码应该在特定DIV的末尾添加一个新节点。为此,它必须找到名为branchID的元素的value属性。然后它将值递增1并向页面添加新的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:object is not a function”。错误消息并没有指出我找到解决方案的正确方向。我确信这是我使用domAttr.get函数来获取值的方式,但我似乎找不到按照我期望的方式来完成这项工作的方法。 Dojo如何处理这样的事情?如果有人能够指出解决方案需要如何/为何需要按照它的方式编写的文档,将会非常有帮助。
答案 0 :(得分:0)
我能够找到这个问题的解决方案,但不是删除问题,我会提供有关我发现的内容的详细信息,以便其他人可能无法做出真正的初学者错误。问题是我在require语句之后编写函数定义的方式。函数定义要求指定require中的每个项目(domReady!除外,因为它是加载器的辅助函数)。当我阅读文档时,我错过了 small 细节。以下代码完全按预期工作。
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语句以及如何使用它,所以我在前几次错过了这个。