자바 스크립트 모듈과이를 작성하는 방법을 배우고 있습니다. 나는 내 패턴이 옳았다는 것을 100 % 확신하지 못한다는 쟁점에 부딪쳤다. 나에게 쉬운 나중에 할 수있는 모든 의견은 좋을 것이지만 내 문제는 프로토 타입을 올바르게 사용하는 방법을 모르겠다.자바 스크립트 모듈 설계, 참고 자료
내가 이렇게 내 모듈을 사용
var cm = CodeMirror.fromTextArea(document.getElementById("code"), {
lineNumbers: true,
matchBrackets: true,
mode: "text/x-csharp"
});
var adapt = new $.codeMirrorSignalRAdapter(cm, $.connection.codeHub);
하지만 내 adapter.prototype의 hubChange에서
에서, this.silent이 정의되지 않습니다. var 어댑터 = function (cm, hub)이 생성자라고 생각하고 프로토 타입 함수에서 자체 속성 [self, cpu, silent]에 액세스하는 방법을 모르겠습니다.(function ($, window) {
"use strict";
if (typeof ($) !== "function") {
// no jQuery!
throw new Error("CodeMirrorAdapter: jQuery not found. Please ensure jQuery is referenced before the SignalR.js file.");
}
if (typeof ($.signalR) !== "function") {
throw new Error("CodeMirrorAdapter: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs.");
}
var adapter = function (cm, hub) {
var self = this;
self.cm = cm;
self.hub = hub;
self.silent = false;
cm.on("change", function (_, change) { self.onChange(change); });
hub.client.Change = self.hubChange;
return self;
};
adapter.fn = adapter.prototype = {
init: function (cm, hub) {
},
onChange: function (change) {
if (!this.silent) {
this.hub.server.change(change)
.done(function() { })
.fail(function (ee) { alert(ee) });
}
},
hubChange: function (change) {
alert(this.silent);
this.silent = true;
this.cm.replaceRange(change.text[0], change.from);
this.silent = false;
},
};
$.codeMirrorSignalRAdapter = adapter;
}(window.jQuery, window));
이 키워드의 문제 외에도 모듈 디자인이 다소 괜찮습니까?
감사합니다. 잠시 시간을내어 읽어 보겠습니다. 적용은 문제를 해결합니다. –
@ s093294, 내 시도가 귀하의 질문에 대한 답변이라면, 대답으로 인정할 수 있으면 감사하겠습니다. 그렇지 않다면 대답하지 않은 내용에 대해 의견을 말하십시오. –