1

我正在尝试将 PageDown 挂接到我的 Rails 应用程序中,因为 Markdown 编辑器很棒。

但是,我发现这很困难,因为 Rails 通过表单助手自动分配 id,而 PageDown 期望将 id “wmd-input”分配给 textarea 字段。在我的模型中,我有一个名为“body”的文本属性,我想将其用作编辑器,但会f.text_area :body生成一个带有 id 的 textarea post_body

因此,我目前的方法是告诉 PageDown 将编辑器与具有特定类名的文本区域相关联,而不是将其与特定 ID 相关联。这是我对如何进行感到困惑的地方。这是Markdown.Editor.js 的链接

导航到function PanelCollection(postfix) {(第 244 行)。我想将该函数中的第三行更改为:

this.input = doc.getElementById("wmd-input" + postfix);

this.input = doc.getElementsByClassName("wmd-input" + postfix)[0];

我从来没有做过这样的事情。此外,编辑 Markdown.Editor.js 的源代码并不是一个真正的选择,因为它是自动生成的。我需要在创建函数后更改它。我怎样才能做到这一点?

编辑#1:

所以,这是我第一次在 GitHub 上分叉和贡献任何东西,但我分叉了 pagedown-rails gem 并进行了更改,并通过将我的 Gemfile 中列出的 gem 连接到我的 fork 来确保它工作。工作得很漂亮,谢谢你的建议。我通过这个拉取请求回馈了。

4

1 回答 1

1

这是一个主要的 hack,但如果传递的字符串以 开头,您可以通过覆盖document.getElementById()委托 to 来完成它:document.getElementsByClassName()'wmd-input'

var doc = document;
doc.__getElementByIdOrig = doc.getElementById;
doc.getElementById = function (idStr) {
    if (idStr.match(/^wmd-input/)) {
        var elt = this.getElementsByClassName(idStr)[0];
        return elt ? elt : null;
    }

    return this.__getElementByIdOrig(idStr);
};
于 2012-12-09T23:27:52.700 回答