我只是Dojo和JavaScript编程的初学者,希望有人能给我一个暗示。
我想在运行时修改dijit.form.ComboBox的store属性。 (我创建了一个id为“cmbCat”的组合框和一个id为“catData”的数据存储。如果在我的HTML页面中嵌入store =“catData”,它可以正常工作)
我的第一个方法是使用dojo.attr(“cmbCat”,{store:“catData”}); 但是,它没有用。
我的第二种方法是使用cmbCat.store = catData; 这很好。
我只是想知道何时应该使用dojo.attr以及何时使用dot属性?如果它们相同,为什么我的dojo.attr不起作用?
非常感谢帮助我!
尼克
答案 0 :(得分:1)
根据dojo.attr
的{{3}},
DOM属性,事件和CSS样式的getter和setter
因此,在获取/设置DOM属性,事件和CSS样式的值时,应该使用dojo.attr
。在这种情况下,store
属性不适用于dojo.attr
。
答案 1 :(得分:1)
我发现有些小部件在这个意义上与其他小部件有点不同,但对于较新版本的dojo,你应该使用小部件的set方法,而不是attr。
cmbCat.set('store', catData);
了解调用窗口小部件的set / get方法时会发生什么,而不是仅仅使用点语法,这一点很重要。
set和get方法可以映射到某些小部件实现的自定义setter和getter。如果只使用点语法调用属性,则不会调用自定义setter和getter。我认为在较旧版本的dojo上,attr在小部件上用于此目的,但该功能已被弃用且不太可靠。窗口小部件上下文中的attr方法将在Dojo 2.0中删除,并在Dojo 1.4中弃用。 http://mail.dojotoolkit.org/pipermail/dojo-interest/2010-April/045199.html
您可以在此处查看有关setter和getter的更多信息:http://dojotoolkit.org/reference-guide/quickstart/writingWidgets.html#custom-setters-getters
在我使用1.5的代码中,我一直使用set方法设置选择的商店,还设置内容窗格,内容等的标题。它运作良好。
此外,假设在创建窗口小部件时catData在您的范围内,您在此处有一个简单的错误:
dojo.attr("cmbCat", {store: "catData"});
由于“catData”是一个字符串,因此您正在为store属性分配一个字符串。这不会以编程方式工作,您需要catData作为引用dojo.data.ItemFileWriteStore或类似副本的变量。