2016-07-07 2 views
5

API에서 들어오는 항목의 목록이 있으며 항상 같은 것은 아니므로 배열의 항목 수가 항상 변경됩니다. 각 항목에 대한 확인란을 만들고 있습니다.Aurelia에서 체크하지 않고 체크 할 때 함수를 호출하는 방법

사용자는 각 항목을 선택/선택 해제 할 수 있습니다.

  1. 항목을 선택하면, 그것은 배열
  2. 항목을 선택 해제로 해당 항목의 ID를 밀어 것, 그것은 배열에서 해당 항목의 ID를 제거합니다 : 여기에 내가하고 싶은거야

내가 점검했는지 여부를 기반으로 무언가를 호출하는 방법을 알아야합니다. 나는 "checked.delegate"와 "checked.trigger"를 시도해 보았다. 나는 그것을 작동시키지 못했다.

정상적인 click.delegate는 진실인지 거짓인지에 대한 상태를 유지할 수 없기 때문에 모든 항목에 대해 변수를 설정할 수 없기 때문에 정상적으로 작동하지 않습니다. API에서 오는 것입니다. 어떤 제안?

답변

11

는 다음과 같이 change.delegate 또는 change.trigger보십시오 :

VM 방법 :

logchange(value) { 
    console.log(value); 
} 

보기 :이 작업을 수행 할 수 있습니다

<input type="checkbox" change.delegate="logchange($event.target.checked)" /> 
+0

확인 된 경우 1 개의 메서드를 호출해야하고 선택하지 않은 경우 1 개의 메서드를 호출해야하므로이 메서드가 작동하지 않을 것으로 생각됩니다. 그들이 점검하는지 여부를 어떻게 확인할 수 있습니까? – James

+0

실제로 작동합니다. 굉장한 남자, 그렇게 많이 고마워! – James

-1

한 가지 방법은 세터의 도움을받는 것이다.

<input type="checkbox">

이보기 모델에 개인 필드를 만든 다음 게터와 세터로 포장 :

get isChecked(){ 
    return this._isChecked; 
} 

set isChecked(value){ 
    this._isChecked = value; 
    //enter your extra logic here, no need for an event handler 
} 

private _isChecked: boolean; 

그런 다음 뷰에 isChecked 바인딩의는이 같은 체크 박스를 가지고 있다고 가정 해 봅시다 :

<input type="checkbox" checked.bind="isChecked">

확인란이 선택 될 때마다 또는 SETTE되지 않은 r이 호출되며 setter 내에서 원하는 모든 메서드를 호출 할 수 있습니다.

이를 또 다른 더 틀에 얽매이지 않는 방법은이 같은 @bindable 장식을 사용하는 것입니다 :

@bindable isChecked: boolean;

당신은 아마 isChecked이 바인딩되고 싶지 않기 때문에 그것은 틀에 얽매이지입니다하지만 장식은 당신이에 액세스 할 수 있습니다 isCheckedChanged 방법 :

isCheckedChanged(newValue, oldValue){ 
    //Logic here 
} 

그리고 물론

는로 잡을 수있는 change 이벤트가및 change.delegate하지만 이미 다른 답변에서 언급되었습니다.

+0

Aurelia에서이 작업을 수행하는 가장 확실한 방법은 여기에서 수행하는 것처럼 getter/setter를 만드는 것입니다. getter/setter를 사용하면 Aurelia의 바인딩 엔진이 더티 검사를 사용하도록 전환됩니다. 자신의 Aurelia 응용 프로그램에서이 작업을 수행하는 경우이 작업을 중단 할 것을 당부드립니다. –

+1

그러나 더 중요한 것은,이 대답은 OP의 특정 질문에 대해 작동하지 않을 것이라고합니다. OP는 중계기 내부에서 작동하므로 임의의 수의 확인란으로 작업 할 수 있습니다. –