如果以编程方式设置初始值,Dojo InlineEditBox 会在单击时清除
Dojo InlineEditBox clears on click if initial value set programmatically
Dojo InlineEditBox 允许用户点击一段文本,将其变成一个编辑框并允许编辑文本(然后可以保存或取消更改)。
就我而言,我需要以编程方式覆盖文本框的初始值(实际上是通过 REST 调用)。一个 dojo 错误(我假设)导致 InlineEditBox 在您单击它时被重置为初始值,并且您留下 "editing" 一个文本框,其中的文本与您单击之前的文本不同 - 不是最好的用户体验。 Dojo 似乎在首次创建 InlineEditBox 时保存该值 ,然后 以编程方式设置该值,然后在该框切换到编辑模式时应用该初始值。
所以如果我有一个 div
,用文本 "initial" 和 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?
});
然后在正常状态下,该框包含 "Click to edit text...",但是当我单击编辑该文本时,我只剩下编辑文本 "initial"。
这是一个fiddle demonstrating the problem。
所以我的问题是:如何设置 Dojo InlineEditBox 的 "saved value" 以覆盖它在创建时保存的初始值? (在我的例子中,我将 div 留空,并且在编辑模式下该框被清除。)我在控制台中玩过,可以看到我可以用框对象做的很多事情,而且我'我已经查看了文档,但除了为其 innerHTML
.
赋值外,找不到设置值的方法
检索我要设置的值的调用是异步的,所以我不能在创建框时设置它,必须在之后才可以。如果没有其他办法,很高兴考虑从 Dojo 1.7 迁移到更新的版本,但这意味着需要进行相当多的回归测试,所以如果可能的话,我希望它能与 1.7 一起使用。
这不是错误 - 只是小部件使用不当。实际上,文本节点(双击前)和编辑模式下的文本区域是两个不同的 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>
Dojo InlineEditBox 允许用户点击一段文本,将其变成一个编辑框并允许编辑文本(然后可以保存或取消更改)。
就我而言,我需要以编程方式覆盖文本框的初始值(实际上是通过 REST 调用)。一个 dojo 错误(我假设)导致 InlineEditBox 在您单击它时被重置为初始值,并且您留下 "editing" 一个文本框,其中的文本与您单击之前的文本不同 - 不是最好的用户体验。 Dojo 似乎在首次创建 InlineEditBox 时保存该值 ,然后 以编程方式设置该值,然后在该框切换到编辑模式时应用该初始值。
所以如果我有一个 div
,用文本 "initial" 和 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?
});
然后在正常状态下,该框包含 "Click to edit text...",但是当我单击编辑该文本时,我只剩下编辑文本 "initial"。
这是一个fiddle demonstrating the problem。
所以我的问题是:如何设置 Dojo InlineEditBox 的 "saved value" 以覆盖它在创建时保存的初始值? (在我的例子中,我将 div 留空,并且在编辑模式下该框被清除。)我在控制台中玩过,可以看到我可以用框对象做的很多事情,而且我'我已经查看了文档,但除了为其 innerHTML
.
检索我要设置的值的调用是异步的,所以我不能在创建框时设置它,必须在之后才可以。如果没有其他办法,很高兴考虑从 Dojo 1.7 迁移到更新的版本,但这意味着需要进行相当多的回归测试,所以如果可能的话,我希望它能与 1.7 一起使用。
这不是错误 - 只是小部件使用不当。实际上,文本节点(双击前)和编辑模式下的文本区域是两个不同的 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>