撰写Jacada Interaction扩展

时间:2015-06-04 00:37:21

标签: callback extension-methods interaction

我想创建一个"扩展程序"对于Jacada Interaction(扩展功能),在我的情况下解析并将serialNumber(一个字母,后跟数字)的数字部分分配给一个数字全局(" system")变量,比如serialNumeric。我缺乏的是使这项工作的结构和语法,包括从扩展中引用交互变量的方式。

这是我失败的尝试,线条被注释掉,以便在失败后使其无害;我想我删除了#34;返回页面;"在崩溃之后,它仍然崩溃了:

initExtensions("serialNumeric", function(app){
    app.registerExtension("loaded", function(ctx, page) {
        // Place your extension code here
        //$('[data-refname="snum"]').val('serialNumber');        
        // snum = Number(substring(serialNumber,1))
    });
});

这是一个有效的例子:

/**
 * Description: Add swiping gestures to navigate the next/previous pages 
 */
initExtensions("swipe", function(app) {
    // Swipe gestures (mobile only)
    app.registerExtension('pageRenderer', function(ctx, page) {
        page.swipe(function(evt) {            
            (evt.swipestart.coords[0] - evt.swipestop.coords[0] > 0)  
                ? app.nextButton.trigger('click')
                : app.backButton.trigger('click')
        });
        return page;
    });
});

在阅读下面的评论后,我尝试了以下操作,但未成功(修改后的问题变量未写回该变量)。它在评论部分表现不佳,所以我把它放在这里:

    initExtensions("serialNumeric", function(app){
        app.registerExtension("loaded", function(ctx, page) {
            var sernum = new String($('[data-refname="enter"] input'));
            var snumeric = new String(sernum.substr(1));
            $('[data-refname="enter"] input').val(snumeric);
        });
    });

我想了解这段代码何时运行:在分配变量时运行它似乎是合乎逻辑的。感谢您的任何见解〜

2 个答案:

答案 0 :(得分:1)

在您的情况下,您会延长loaded事件。您不必像在下面的工作示例中那样从扩展程序返回页面。

page参数包含刚刚加载的页面的DOM,ctx参数包含JSON格式的页面数据。您可以在浏览器的检查工具中检查这两个参数的内容。我喜欢Chrome。在Windows上按 F12 或在Mac上按 Shift + Ctrl + I

选择器$('[data-refname="snum"] input')将为您提供您在设计器中定义的名称为snum的问题的输入字段。然后,您可以使用serialNumber变量中的值将值放在输入字段中。

$('[data-refname="snum"] input').val(serialNumber);

您也可以用同样的方式阅读值。

您不能(此时)访问扩展程序中的交互变量,除非您将这些变量放在问题字段中。

答案 1 :(得分:0)

这是一个简单的示例,如何将您自己的值以编程方式放入输入字段并使其将其读入模型,因此接下来它将被发送到服务器。欢迎您尝试更复杂的选择器以适应您自己的形式。

initExtensions("sample", function(app){
    
    app.registerExtension("loaded", function(ctx, page) {        
        // simple selector
        var i = $('input');        
        // set new value
        i.val('some new value');
        // cause trigger so we can read into our model
        i.trigger('change');
    });    
   
});