녹아웃 매핑 플러그인을 통해 생성 된 다음 ViewModel을 고려하십시오.녹아웃 동적 바인딩 문제
var originalData = {
"QuoteSelectedViewModel": {
"ProductName": "Select",
"CoverQuotesViewModel": [
{
"Code": 1,
"Label": "Première Assistance 24h/24 (GRATUITE)",
"IsMandatory": true,
"IsSelected": true,
"DependsOn": []
},
{
"Code": 2,
"Label": "Assistance PLUS 24h/24",
"IsMandatory": false,
"IsSelected": false,
"DependsOn": []
},
{
"Code": 8,
"Label": "Heurts Animaux/Force de la Nature",
"IsMandatory": false,
"IsSelected": false,
"DependsOn": [
2
]
},
]}
}
var viewModel = ko.mapping.fromJS(originalData);
ko.applyBindings(viewModel);
<div data-bind="with: QuoteSelectedViewModel">
selected quote is : <span data-bind="text: ProductName"></span>
<!-- ko foreach: CoverQuotesViewModel -->
<br/>
<div data-bind: if: IsVisible>
<input type="checkbox" data-bind="checked: IsSelected"></input>
<input type="text" data-bind="value: Label, enable: IsSelected"></input>
</div>
<!-- /ko -->
</div>
이제는 IsVisible이 false를 반환 할 때 div를 숨기려고합니다. IsVisible은 아직 존재하지 않으며 CoverQuotesViewModel 배열의 각 요소에 대해 계산 된 관찰 가능 함수 여야합니다.
이 계산 된 관측 가능 함수를 각 요소에 어떻게 생성합니까?
감사
[편집] 내가 여기 jsfiddle 추가 한 :
: http://jsfiddle.net/graphicsxp/fpKWM/[EDIT2] 사실 녹아웃 문서가 작업을 수행하는 방법에 대한 명확한를
물론, 생성 콜백에서 원하는 경우 ko.mapping.fromJS를 다시 호출 할 수 있습니다. 당신은 몇 가지 추가 계산 관찰 가능한 원래 자바 스크립트 객체를 증가시키기 위해 를 원하는 경우 일반적인 사용 예는 다음과 같을 수 있습니다
var에 myChildModel = 기능 (데이터) { ko.mapping.fromJS (데이터, {}이) ;
this.nameLength = ko.computed(function() { return this.name().length; }, this); }
[편집]
여기에 바울의 제안 다음 전체 코드입니다 : (getQuotesSuccess는 AJAX 성공 핸들러가이)
viewModel.getQuotesSuccess = function (result) {
var myCoverQuotesViewModel = function (data, parent) {
var self = this;
ko.mapping.fromJS(data, {}, this);
self.IsVisible = ko.computed(function() {
var visible = true;
if (self.DependsOn().length > 0) {
$.each(self.DependsOn(), function (index, value) {
var dependency = viewModel.QuoteSelectedViewModel().CoverQuotesViewModel.filterByProperty("Code", value);
if (dependency().length > 0) {
visible = visible & dependency()[0].IsSelected();
} else {
visible = false;
}
});
}
return visible;
}, this);
}
var mapping = {
'CoverQuotesViewModel': {
create: function (options) {
return new myCoverQuotesViewModel(options.data, options.parent);
}
}
}
ko.mapping.fromJS(result, mapping, viewModel);
};
정확히 어떤 논리로 IsVisible을 사용할 수 있습니까? –
IsVisible의 논리가 문제와 관련이 없다고 가정 해 봅시다. true 또는 false를 반환해야합니다. 문제는 배열의 각 요소에 대해이 계산 된 관측 가능 함수를 동적으로 생성하는 방법을 모르겠다는 것입니다. – Sam
어레이의 각 객체를 반복하는 방법에 대한 내 대답을 참조하십시오. 그게 니가 한 일이 아니야? –