두 가지 옵션으로 바인딩을 다시 작성할 수 endDate
<input id="foo" type="text" data-bind="dateTimePicker: $root.form().budget.budgetEndDate" />
에 별칭 $root.form().budget.budgetEndDate
할 수 있습니다.
데모 목적은 아니지만 매우 권장을 위해 첫째, 당신이 전역 네임 스페이스 오염 울드 :
function Root() {
this.form = ko.observable(new Form());
}
function Form() {
this.budget = {
budgetEndDate: ko.observable("dummy budget end date")
};
window["endDate"] = this.budget.budgetEndDate;
}
ko.applyBindings(new Root());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<div>
endDate outside form: <b data-bind="text: endDate"></b>
</div>
<div data-bind="with: form">
<div>inside form: <b data-bind="text: endDate"></b></div>
<div data-bind="with: budget">
<div>inside form.budget: <b data-bind="text: endDate"></b></div>
</div>
</div>
둘째, 당신은 $root
에 배치 할 수 :
function Root() {
this.form = ko.observable(new Form());
this.endDate = this.form().budget.budgetEndDate;
}
function Form() {
this.budget = {
budgetEndDate: ko.observable("dummy budget end date")
};
}
ko.applyBindings(new Root());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<div>
endDate outside form: <b data-bind="text: $root.endDate"></b>
</div>
<div data-bind="with: form">
<div>inside form: <b data-bind="text: $root.endDate"></b></div>
<div data-bind="with: budget">
<div>inside form.budget: <b data-bind="text: $root.endDate"></b></div>
</div>
</div>
그러나 주관적인 메모에서이 디자인의 냄새 및/또는 XY 문제라고 생각합니다. budgetEndDate
에 바인딩하는 장소는 해당 컨텍스트 /보기에 직접 액세스해야합니다. 이 관측 가능 항목을 뷰 모델의 다른 부분으로 이동하는 것을 고려해야합니다.
왜 'self.endDate = ko.observable (self.form(). budget.budgetEndDate)'에 지정하지 않습니까? '; –