我有一个html编辑器自定义控件,我一直在使用它有一个基本的撤销/重做功能,可以很好地适应编辑器中的所有功能。 undo / redo函数使用2个堆栈(分别命名为UndoStack和RedoStack),当修改编辑器的text属性的其他编辑器函数之一出现在UndoStack上时。对于可视化,单击“撤消”时,将调用pop,并将该值存储到重做堆栈中。
但是,编辑器还与一些页面上的AJAX函数交互,允许用户插入存储在我们数据库中的已写入文本。我想在这里完成的是包含用于在页面上运行编辑器的JavaScript,并调用将文本从页面推送到撤消堆栈所需的函数。
作为旁注,我使用Rob2211在Embedded dll resources上提供的解决方案来获取相关页面上的脚本文件,但我想知道如何从中调用函数,因为它一直在说我想调用的函数(pushUndoStack(),原谅缺乏创造力)是未定义的。
由于
P.S。我通常使用C#编写代码,但有些项目是在VB.NET中
代码段:在页面上
注册页面指令
<%@ Register Assembly="WebControl.HtmlEditor" Namespace="WebControl.HtmlEditor" TagPrefix="ec" %>
抓取HtmlEditor.js函数的代码
<script type="text/javascript" src="<%= HtmlEditor.Resource.GetClientScript(Me.Page, "HtmlEditor.js")%>"></script>
代码片段:在C#文件中 资源类
public class Resource
{
public static string GetClientScript(Page p, string file)
{
return p.ClientScript.GetWebResourceUrl(typeof(Resource), typeof(Resource).Namespace + ".Scripts." + file);
}
}
装配参考:
[assembly: WebResource("WebControl.HtmlEditor.Scripts.HtmlEditor.js", "text/javascript")]
原型功能:(包含以下撤消/重做功能)
WebControl.HtmlEditor.HtmlEditor.prototype =
{
.
.
.
}
来自嵌入式JavaScript文件:所有撤消/重做相关功能。
getUndoStack: function () {
return this.undoStack;
},
pushUndoStack: function (value) {
this.undoStack.push(value);
},
popUndoStack: function () {
return this.undoStack.pop();
},
getRedoStack: function () {
return this.redoStack;
},
setRedoStack: function (value) {
this.redoStack = value;
},
clearRedoStack: function () {
var redoStack = this.getRedoStack();
redoStack = new Array();
this.setRedoStack(redoStack);
},
pushRedoStack: function (value) {
this.redoStack.push(value)
},
popRedoStack: function () {
return this.redoStack.pop();
}
答案 0 :(得分:0)
我使用jQuery解决了这个问题。由于我需要的JavaScript函数嵌入在HTML编辑器自定义控件中,我需要的功能已经可用于页面,它只需要一种方法来实现它。使用$ find('ControlID')方法,我能够在DOM树中搜索“Editor”的ID,并访问控件中包含的所有内容,在本例中是名为pushUndoStack()的函数。让我得出这个结论的是该项目的另一部分,它完成了该项目的拼写检查部分。
感谢@AndrewWalters和@TsanyoTsanev的帮助。