5
나는이 질문을 일찍 요청했지만 대답을 얻지 못했습니다. 편집 가능한 기능이 참/거짓 전환하기로하고 다음 버튼을 누르면 편집 모드로 전환됩니다녹아웃 : 바인딩을 처리 할 수 없습니다.
Uncaught ReferenceError: Unable to process binding "visible: function(){return !editable() }"
Message: editable is not defined
: 내 코드를 실행하면
는이 오류 메시지가 표시됩니다. 이 버튼은 html에서 foreach를 통해 호출되므로 내 viewmodel과 관련이 있다고 생각합니다. 내 getJson에서 얻은 출력은 제대로 작동하지만 편집 가능한 함수가 어떻게 든 충돌합니다. 여기
<div><ul data-bind="foreach: comments">
<li class="ul3">
<span class="author" data-bind="text: nickname, visible: !editable(), click: editComment">
</span>
<input type="text" data-bind="value: nickname, visible: editable()"/>:
<div>
<span class="comment" data-bind="text: newMsg, visible: !editable(), click: editComment">
</span>
<textarea class="myComment" type="text" data-bind="value: newMsg, visible: editable()">
</textarea>
</div>
<button data-bind="click: editComment, text: editable() ? 'Save' : 'Edit comment'">
</button>
<button data-bind="click: deleteComment">Delete</button>
</li>
</ul>
</div>
그리고 내 자바 스크립트입니다 :
function Comment() {
var self = this;
self.nickname = ko.observable();
self.newMsg = ko.observable();
self.editable = ko.observable(false);
self.sendEntry = function() {
vm.selectedComment(new Comment());
if (self.newMsg() !== "" && self.nickname() !== "") {
$.post(writeUrl, "entry=" + ko.toJSON(self));
self.newMsg("");
}
vm.cSection().getNewEntries();
};
self.deleteComment = function() {
vm.comments.remove(self);
};
self.editComment = function() {
self.editable(!self.editable());
};
}
function commentSection() {
var self = this;
self.timestamp = 0;
var entry;
self.getNewEntries = function() {
$.getJSON(readUrl, "timestamp=" + self.timestamp, function (comments) {
for (var i = 0; i < comments.length; i++) {
entry = comments[i];
if (entry.timestamp > self.timestamp) {
self.timestamp = entry.timestamp;
}
vm.comments.unshift(entry);
}
self.getNewEntries();
});
};
}
function ViewModel(){
var self = this;
self.cSection=ko.observable(new commentSection());
self.comments = ko.observableArray();
self.selectedComment = ko.observable(new Comment());
//self.cSection().getNewEntries();
}
var vm=new ViewModel();
ko.applyBindings(vm);
vm.cSection().getNewEntries();
});
'editable is not defined'가 범위 문제와 같은 것처럼 보입니다. 당신은'$ root.! editable()'을 사용해 보았습니다. 바이올린을 설치하면 더 좋을 것입니다. –
코드를 압축하십시오. 3 줄의 HTML과 몇 줄의 JavaScript로 문제를 설명하기에 충분합니다. 동료 개발자들에게 부탁을하고 가능한 한 관련성이 적은 정보를 제공하십시오. 또한 실수로 자신을 볼 때까지는 물건을 제거하면 더 명확하게 볼 수 있습니다. 정말 101 번 디버깅입니다. – Tomalak