3

我有一个我一直在研究的 html 编辑器自定义控件,它具有基本的撤消/重做功能,可以很好地与作为编辑器一部分的所有功能配合使用。撤消/重做功能使用 2 个堆栈(分别称为 UndoStack 和 RedoStack),当修改编辑器的文本属性的其他编辑器功能之一发生时,它们会推送到 UndoStack。对于可视化,当单击 Undo 时,会调用 pop 并将该值存储到重做堆栈中。

但是,编辑器还与一些页面 AJAX 功能进行交互,这些功能允许用户插入存储在我们数据库中的已编写文本。我在这里要完成的是包含用于在页面上运行编辑器并调用将文本从页面推送到撤消堆栈所需的函数的 JavaScript。

作为旁注,我使用 Rob2211 在Embedded dll 资源上提供的解决方案来获取相关页面上的脚本文件,但我想知道如何从中调用函数,因为它一直说我想要的函数调用(pushUndoStack(),请原谅缺乏创造力)是未定义的。

谢谢

PS 我一般用 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();
    }
4

1 回答 1

0

我使用 jQuery 解决了这个问题。由于我需要的 JavaScript 函数嵌入在 HTML 编辑器自定义控件中,所以我需要的函数已经可用于页面,它只需要一种方法即可。使用 $find('ControlID') 方法,我能够在 DOM 树中搜索 'Editor' 的 ID 并访问包含在控件中的所有内容,在本例中,是名为 pushUndoStack() 的函数。导致我得出这个结论的是这个项目的另一部分,它完成了这个项目的拼写检查组件。

感谢@AndrewWalters 和@TsanyoTsanev 的帮助。

于 2013-10-14T21:24:45.287 回答