2016-08-04 2 views
0

때로는 뷰에서 여러 번 액세스하는 뷰 모델의 요소가 있고 뷰 컨텍스트의 별칭을 할당하여 물건을 짧게 할 수 있기를 원합니다.녹아웃에서 별칭 만들기?

foreachas 별칭이나 with과 비슷한 내용의 무언가를 찾고 있는데, 하나의 임의 액세스로 사용할 수 있습니다. 예를 들어

다음에 나는 그 때 나는이

<input id="foo" type="text" data-bind="dateTimePicker: endDate" /> 
+0

왜 'self.endDate = ko.observable (self.form(). budget.budgetEndDate)'에 지정하지 않습니까? '; –

답변

0

두 가지 옵션으로 바인딩을 다시 작성할 수 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에 바인딩하는 장소는 해당 컨텍스트 /보기에 직접 액세스해야합니다. 이 관측 가능 항목을 뷰 모델의 다른 부분으로 이동하는 것을 고려해야합니다.