0

我有一个包含事件的 C# COM DLL(“This.That”),我已经使用 JS 对其进行了测试,它们工作正常。我现在正试图将所有经过测试的代码包装在一个对象中。以下示例工作正常:

var oTest = new Test();

function Test()
{
    var oDevice = new ActiveXObject("This.That");

    this.CancelOperation = function()
    {
        try
        {
            oDevice.CancelOperation();
            return "CancelOperation successful.";
        }
        catch (e)
        {
            return e.message;
        }
    };
}

但是一旦我尝试向它添加一个事件,它就不起作用了。看起来它可能是错误的语法。我在网上找不到任何资源来解释这是如何完成的。

var oTest = new Test();

function Test()
{
    var oDevice = new ActiveXObject("This.That");

    this.CancelOperation = function()
    {
        try
        {
            oDevice.CancelOperation();
            return "CancelOperation successful.";
        }
        catch (e)
        {
            return e.message;
        }
    };

    oDevice::DeviceStatusUpdate(wasSuccess, message, data) = function()
    {
        document.getElementById("outBox").value += "Success: " + wasSuccess.toString() + "\nMessage: " + message + "\nData:" + data + "\n\n";
    };
}
4

1 回答 1

0

我已经得到了一些工作,但我仍然希望看到其他答案。这会将事件处理程序放在 JS 文件之外并放入文档中,但代码本身仍在 JS 文件中。代码的组织是我最关心的,所以这对我来说是可以接受的。

var oTest = new Test();

function Test()
{
    var oDevice = new ActiveXObject("This.That");

    this.CancelOperation = function()
    {
        try
        {
            oDevice.CancelOperation();
            return "CancelOperation successful.";
        }
        catch (e)
        {
            return e.message;
        }
    };

    this.WireEvents = function()
    {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.text = 'function oTest.oDevice::DeviceStatusUpdate(wasSuccess, message, data) { document.getElementById("outBox").value += "Success: " + wasSuccess.toString() + "\\nMessage: " + message + "\\nData:" + data + "\\n\\n"; }';
        document.body.appendChild(script);
    };
}
于 2012-11-12T21:45:05.143 回答