2012-12-09 4 views
1

Markdown 편집기가 멋지 기 때문에 PageDown을 내 Rails 앱에 연결하려고합니다.프로토 타입으로 기존 JavaScript 개체 기능을 변경 하시겠습니까?

그러나 Rails가 양식 도우미를 통해 id를 자동 할당하고 PageDown이 id "wmd-input"이 textarea 필드에 지정되기를 기대하기 때문에이 방법은 어렵습니다. 내 모델에는 "body"라는 텍스트 속성이있어서 편집기로 사용하고자하지만, f.text_area :bodypost_body이라는 텍스트 영역을 생성합니다.

그래서 현재 나의 접근 방식은 PageDown에 특정 ID와 연결하지 않고 특정 클래스 이름을 사용하여 텍스트 영역과 편집기를 연결하는 것입니다. 이것은 진행 방법에 관해서 혼란 스럽습니다. 여기에 link to 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 키 레일 보석을 포크 내 변화를 만들어가 보석을 연결하여 작동 보장 내 Gemfile에 내 포크에 나열되어 있습니다. 아름답게 일했고, 제안에 감사드립니다. 나는 via this pull request에 기여했다.

+1

나는 문제가 무엇이든 있다고 생각하지 않습니다 루비 온 레일이나 프로토 타입으로 – Bergi

+0

직접 소스를 호스팅하고 그 한 줄을 직접 편집하지 않으시겠습니까? 오, 그리고 그것은 특정 시점에서 편집 할 수만 있다면, 단순히 생성자를 노출 ... –

+0

변경하는 내 이유는 레일 특정, 그 레일 태그를 포함 할 가치가 있지 않니? –

답변

1

IT는 주요 해킹, 그러나 전달 된 문자열이 'wmd-input'로 시작하면 당신은 document.getElementsByClassName()에 위임 할 document.getElementById()를 오버라이드 (override)를 달성 할 수 :

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); 
}; 
+0

솔직히 말해서 나는 더 깨끗한 방법을 생각할 수 없다. PageDown 소스는 보석의 일부이며 보석에 직접 해킹하는 아이디어가 마음에 들지 않습니다. \ –

+3

보석을 포크 할 수 없습니까? –

+0

예, 소스 편집이 옵션이 아니면 유일한 옵션 인 것 같습니다. – Bergi

관련 문제