onreset 后的 Jeditable 回调

Jeditable callback after onreset

我有一串由换行符分隔的多行字符串,在客户端使用 javascript 解析为 <ul> 层次结构。 Jeditable 用于编辑列表,用户看到带有换行符的原始文本(从 loadurl 参数发送)而不是解析后的 HTML。例如

原始 text/string 以及编辑后用户看到的内容:

line1
line2
line3
line4

在页面加载和编辑后解析为以下内容。用户在查看(不编辑)时看到的内容:

<ul>
   <li>line 1</li>
   <li>line 2</li>
   <li>line 3</li>
   <li>line 4</li>
</ul>

使用以下 jeditable 设置在这里一切正常:

$('.editable').editable(function(value, settings) {
    var data = jeditableSubmitChange(value);
    return(data);
}, {
    type      : 'textarea',
    loadurl   : '/util/fetchsource.php',
    cancel    : 'Cancel',
    submit    : 'Change',
    loadtext : 'Loading...',
    indicator : 'Saving...',
    tooltip   : 'Click to edit...',
    cssclass  : 'liveeditform',
    cancelcssclass : 'button button__under',
    submitcssclass : 'button button__under',
    submitdata : {foo: "bar"},
    onreset   : jeditableCancel
});

当用户提交编辑时,他们会很好地传递给 jeditableSubmitChange 函数,最重要的是,我可以修改发送回包含元素的内容,并提供与加载页面时类似的解析.这也很好用。

问题出在用户取消编辑时。 Jeditable returns 没有 html 解析的字符串,加载后我找不到 modify/parse 的方法。我刚得到原始的、未修改的字符串。

研究让我相信 onreset 参数是我所需要的。从我的试验和错误(和研究,例如 this answer)看来它被称为 before 原始内容被加载回包含元素,这意味着我不能调用它修改刚刚加载回包含元素的内容(它只会告诉我它是一个表单 - 它是在返回内容之前)。我也看不到修改返回内容的方法。我得到了它是什么的参数 (original) 但返回或不返回数据似乎没有效果:

function jeditableCancel(settings, original) {

    console.log("jeditable form just cancelled. Function called and confirmed");

    // return "Does this data appear?"; // Didn't appear
    // leaving out return has no effect. The parent container is still populated with the original content.

}

有没有一种方法可以拦截填充回父容器的实际数据并在填充之前对其进行修改(就像我可以提交一样,我可以控制返回的数据),或者是有一个回调,我可以在它完成加载(取消时)时解析页面上的数据?文档似乎也没有建议。我从问题中删除了解析函数,因为它们感觉不相关。它们工作正常,问题不在于我的解析方式,而是在所提到的情况下完全能够修改数据。

事实证明,这对于现有版本是不可能的,而且可能永远不会,因为它的用途太小众了。

源是可用的,但是用 jquery 从头开始​​创建我自己的工作较少(虽然这里太长了,与回答问题)而不是尝试调整 jeditable 提供的内容。我对某些 jeditables 其他功能没有强烈的依赖,并且它不像您想象的那样涉及重新创建核心功能。

我遇到了和你一样的问题。经过多次尝试,找到了解决方案:

             data    : function(string) {                    
                td_object = $(this);
                return string;
             },
             onreset: function(settings, original) {

                td_object.html('whaever');
                return false;
             },

return false是防止替换强制内容的关键