knockoutjs를 사용하고 observableArray에 대한 ko.mapping 및 사용자 정의 업데이트 바인딩을 포함한 프로젝트를 설정하십시오. 값을 직접 설정하면 ko.mapping.fromJS를 사용할 때 업데이트 바인딩이 한 번 실행되고 업데이트 바인딩이 두 번 실행됩니다. 당신은이 표현이 아니다로는 updateBinding 바인딩에서 구문을 호출하는 모든 기능을 사용할 필요가 없습니다observableArray와 함께 ko.mapping을 사용할 때 업데이트 바인딩이 두 번 실행되는 이유는 무엇입니까?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="knockout-2.2.1.js"> </script>
<script type="text/javascript" src="knockout.mapping.js"></script>
</head>
<body>
<div data-bind="foreach: ObservableArray, updateBinding: ObservableArray">
<span data-bind="text: Value"></span>
</div>
<script type="text/javascript">
ko.bindingHandlers['updateBinding'] = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
console.log("Binding Handler (Init)");
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
console.log("Binding Handler (Update)");
var data = ko.utils.unwrapObservable(valueAccessor());
}
};
function MainViewModel() {
var self = this;
self.ObservableArray = ko.observableArray();
}
var viewModel = new MainViewModel();
// Fires Init + Update for ObservableArray
ko.applyBindings(viewModel);
// Setting directly fires Update for ObservableArray once
viewModel.ObservableArray([{ "Value": "Lucky Luke" }]);
// Setting via mapping fires Update for ObservableArray twice
ko.mapping.fromJS({ "ObservableArray": [{ "Value": "Ludwig van Beethoven" }] }, {}, viewModel);
</script>
</body>
</html>
다른 작업을 수행하고 있는지 잘 모르겠습니다. 그러나 이것은 나에게 발생하지 않습니다. 보고있는 문제를 재현하는 바이올린을 게시 할 수 있습니까? http://jsfiddle.net/tyrsius/Sgsh6/ – Tyrsius
마크 업을 표시 할 때까지 합리적인 답변을 제공하는 것은 불가능합니다. 마크 업에는 이것이 발생할 수있는 다른 요인이있을 수 있습니다. –
샘플을 수정했는데 (이전의 테스트는 틀 렸습니다) 가능한 한 간단하게 제 문제를 재현했습니다. – Dresel