를이 내 html로되어 트리거하지 바인딩 강력한 프레임 워크. 하지만 난 내 자신의 코드에서 작동하지 못하게했기 때문에 knockoutjs 사용자 정의 바인딩이 작동하는 방법을 이해하는 데 몇 가지 장애물이 있습니다.업데이트 이벤트는
이var student = function (firstname, lastname, age) {
self = this;
self.firstname = ko.observable(firstname);
self.lastname = ko.observable(lastname);
self.age = ko.observable(age);
}
var model = function (student) {
self = this;
self.student = ko.observable(student);
self.change = function() {
self.student.firstname = "Virna";
self.student.lastname = "Patel";
self.student.age = 27;
};
}
ko.bindingHandlers.schoolCalendar = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var root = $(element);
var value = valueAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
var allBindings = allBindingsAccessor();
var html = "<span id=\"firstname\">Firstname is " + valueUnwrapped.firstname() + "</span><br/>";
html += "<span id=\"lastname\">Lastname is " + valueUnwrapped.lastname() + "</span><br/>";
html += "<span id=\"age\">Age is " + valueUnwrapped.age() + "</span><br/>";
root.append(html);
ko.applyBindingsToNode($("firstname").get(0), valueUnwrapped.firstname());
ko.applyBindingsToNode($("lastname").get(0), valueUnwrapped.lastname());
ko.applyBindingsToNode($("age").get(0), valueUnwrapped.age());
return ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, viewModel, context);
}
};
$(document).ready(function() {
var m = new model(new student("John", "Hadikusumo", 43));
ko.applyBindings(m);
});
내 질문은 :
<form id="form1" runat="server">
<div data-bind="schoolCalendar: student">
</div>
<br />
<input type="button" data-bind="click: change" value="Click"/>
</form>
이 내 자바 스크립트입니다 : 내 html 파일에
이 내 코드 : 그래서 사실은 내가 아래의 코드처럼 내 자신에 대한 몇 가지 작은 실험을했다 : 왜 버튼을 클릭하면 knockoutjs bindingHandler에서 업데이트 이벤트가 트리거되지 않습니다. 내가 뭘 잘못 했니?
난 당신이 self.change에 변경 사항을 따라하지만 여전히 작동하지 않습니다. 변경 사항은 사용자 정의 ko.bindingHandler에서 업데이트 이벤트를 트리거하지 않습니다. –
@JohnHadikusumo bindingHandler는 'stundent'를 듣기 때문에 트리거되지 않지만 학생 개체가 속성 만 변경하기 때문에 발생합니다. KO에게 값이 수정되었다고 말할 필요가 있습니다 :'self.change = function() { self.student(). firstname ("Virna"); self.student(). 성 ("Patel"); self.student(). 나이 (27); self.student.valueHasMutated(); }; ' – nemesv
변경 이벤트가 작동하지 않습니다. 이 얼마나 인생! –