Dojo InlineEditBox允许用户单击一段文本,将其转换为编辑框,并允许对文本进行编辑(然后可以保存或取消更改)。
在我的例子中,我需要以编程的方式覆盖文本框的初始值(实际上是从REST调用)。dojo (我猜想)会导致InlineEditBox在单击它时被重置为初始值,然后您将“编辑”一个文本框,该文本框与单击之前的文本不同--不是最佳的UX。当InlineEditBox首先在以编程方式设置值之前创建时,Dojo似乎会保存该值,然后在框切换到编辑模式时应用该初始值。
因此,如果我有一个div,比如文本“初始值”和id="testDiv",在我的JavaScript中是这样的:
require(["dijit/InlineEditBox", "dijit/form/Textarea", "dojo/domReady!"],
function(InlineEditBox, Textarea) {
var editBox = new InlineEditBox({
editor: Textarea,
autoSave: false
}, "testDiv").startup();
var editText = "Click to edit text...";
dojo.byId("testDiv").innerHTML = editText; // <-- what can I do instead?
});然后,在其正常状态下,该框包含“单击编辑文本.”,但当我单击编辑该文本时,只剩下编辑文本“初始值”。
这是一个用小提琴演示这个问题。
因此,我的问题是:如何设置Dojo InlineEditBox的“保存值”以覆盖它在创建时保存的初始值?(在我的示例中,我将div保持为空,并在编辑模式下清除该框。)我曾在控制台中玩过,我可以看到一堆我可以使用box对象做的事情,我查看了文档,但是除了给它的innerHTML赋值之外,找不到其他方法来设置值。
检索我想要设置的值的调用是异步的,所以我不能在创建该框时设置它,它必须是事后调用。如果没有其他方法,可以考虑从Dojo1.7迁移到一个更新的版本,但这意味着一定要进行一些回归测试,所以如果可能的话,我希望使用1.7。
发布于 2017-05-05 05:38:13
这不是一个bug,只是对小部件的不当使用。实际上,文本节点(在doubleclick之前)和编辑模式下的textarea是两个不同的DOM元素。如果您分配一个人的innerHTML属性,则第二个属性保持不变。
不要将文本分配给innerHTML,而是设置小部件的值:
require([
"dijit/InlineEditBox", "dijit/form/Textarea", "dojo/domReady!"
], function(InlineEditBox, Textarea) {
var editBox = new InlineEditBox({
editor: Textarea,
autoSave: false
}, "testDiv");
editBox.startup();
var editText = "Click to edit text...";
editBox.set("value", editText);
});<script src="//ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dijit/themes/claro/claro.css" />
<div id="testDiv">initial</div>
https://stackoverflow.com/questions/43795911
复制相似问题