Knockout.js를 사용하여 동적 양식 디스플레이를 연결합니다. 따라서 멋진 속성 대신에 필자는 어레이에 임의의 수의 "필드"를 표시하고 표시해야합니다. 제 생각에는 제가 가깝다고 생각하지만, 제 정의 바인딩에 마무리 작업을하는 데 실패하고 있습니다.사용자 바인딩이 값을 래핑하지만 업데이트하지 못합니다.
데이터 내가 관찰 가능한의 관찰 배열이 배열을 매핑 할 ko.mapping 사용하고
myDynamicFields = [
{
name: "email",
value: "[email protected]",
type: "text",
validation: {required: true},
label: "Email Address",
},
{
name: "username",
value: "bobsmith",
type: "text",
validation: {required: true},
label: "Username"
}
];
. 따라서 전체 배열을 관측 할 수있을뿐만 아니라 "이름"및 "값"과 같은 각 필드도 관측 가능합니다. 이 배열은 요소의 개수를 가질 수 있어야하며 "name"을 사용합니다. 뭔가 내보기에서 변경 될 때, 나는 배열의 구성원이 변경되는 묶을 수 있도록
내 사용자 정의
내가 정의 (내가 생각하는) 바인딩을 필요로하는 이유를 바인딩. 다시 말하지만, 빠른 검색을하기 위해 이름에 키가 있습니다. 그것을 확인 :
ko.bindingHandlers.specialValue = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
// This will be called when the binding is first applied to an element
model = _.find(viewModel, function (guy){
return guy.name()==valueAccessor();
});
ko.bindingHandlers.value.init(element, model.value, allBindings, viewModel, bindingContext);
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
model = _.find(viewModel, function (guy){
return guy.name()==valueAccessor();
})
ko.bindingHandlers.value.update(element, model.value, allBindings, viewModel, bindingContext);
}
};
내 템플릿
(내 배열의 각 요소를 통해 간단하게 반복) 그러나
{{#.}}
<p>{{label}}: <input data-bind='specialValue: "{{name}}", valueUpdate: "afterkeydown"'/></p>
{{/.}}
, 나는이 아무것도 업데이트를 수행 할 때. Knockout 코드에 깊이 들어가서 allBindingsObject
에 _ko_property_writers
이라는 속성이 없지만이 시점에서 Knockout에 대한 이해가 부족합니다.
글쎄, 어떻게 값을 바인딩합니까? –
@EricHerlitz 질문에 혼란스러워합니다. 나는 기존의 바인딩 (ko.bindingHandlers.value)을 감싸는 커스텀 바인딩을 만들고 있습니다. 변경시 값을 업데이트하기에 충분합니다. –
업데이트하려는 내용과 혼동됩니다. 이것에서 요소에 이름을 입력 한 다음 일치하는 것을 찾은 다음 해당 요소를 모델의 value 속성으로 업데이트하려고합니다. 그건 이상하게 보입니다. 그렇다면 element.value = ko.utils.unwrapObservable (valueAccessor())와 같은 것이 필요할 것입니다. 그렇지 않으면 나는 손실에 처해있다. –