2012-03-14 4 views
0

는 간단한 녹아웃 루프를 말할 수방법 일반/일반 자바 스크립트 코드를 실행하는

<!-- ko foreach: data --> 
    <div ... show something </div> 
<!-- /ko --> 

난 그냥 (루프의 각 반복에 몇 가지 추가 자바 스크립트 코드를 실행하고 싶은 무엇입니까 이 코드를 모델이 아닌보기에 넣으려는 경우). 스크립트 태그를 사용하는 것이 적합한 지 확실하지 않습니다. 코드가 이미 스크립트 태그 내에 포함되어있을 경우 코드가 녹아웃 템플릿 안에있는 경우 작동하지 않을 것입니다.

정상적인 자바 스크립트 코드를 녹아웃 뷰에서 실행할 수 있었던 몇 가지 사례가 유용 할 것입니다. 내가 자주하고 싶지는 않지만, 드문 경우지만 다른 것들을 바꾸는 대신 정규 JS를 사용하는 것이 더 쉬울 것 같다.

+0

이렇게 더 추가하면 커다란 배열을 반복하고 목록을 사용자에게 다시 표시하는 특정 상황이 있습니다. 이 루프의 특정 지점에서 목록의 나머지 행이 다르게 렌더링되기를 원합니다. 예를 들어 행이 한 방향으로 렌더링해야하는지 아니면 다른 방향으로 렌더링해야 하는지를 결정하는 내 모델 내부의 함수를 가질 수 있습니다. 그러나이 비교 연산은 간단하지 않고 비교를 위해 2 개의 문자열을 조작해야합니다. – Sam

+0

제가 생각했던 또 다른 대안은 루프 내부에 플래그를 사용하는 것입니다. 원하는 조건이 충족되면 플래그가 설정되고 나머지 행이 다르게 렌더링됩니다. (비교 작업을 수행하면 루프 내에서 값이 더 쌉니다. 모델에서 비교를 수행 할 때 필요했던 것처럼 하나의 문자열이 다른 문자열보다 먼저 나오는지 확인하기 위해 문자열을 조작하는 대신 정확한 문자열 일치를 찾을 수 있습니다.) 플래그를 모델에 저장하는 대신 루프에 로컬로 플래그를 저장하는 것이 좋습니다. 그게 왜 내가 녹아웃 루프에서 JS를 실행하고 싶습니다. – Sam

+0

이 외에도 다른 상황에서 드물게 필요할 수도 있으므로 정상적인 JavaScript를 녹아웃 뷰에서 실행하기위한 입자 방법을 알고 싶습니다. – Sam

답변

0

그렇게해서는 안됩니다.

이유는 비즈니스 논리와 데이터를 섞어 놓을 수 밖에 없기 때문입니다.

+0

안녕 Dhaivat, 답장을 보내 주셔서 감사합니다. 나는 네가하는 말을 이해한다. 그것은 내가 정기적으로하고자하는 일이 아니다. 그러나, 내 현재 상황에 대한 구체적인 정보를 얻지는 않고도 녹아웃 루프 내에서 일반 JS를 사용하는 것이 더 쉬울 것이라고 생각합니다. – Sam

+0

또한, 디버깅 및 실험 목적으로 만이 작업을 수행하려는 다른 경우도 있습니다. – Sam

+0

하지만 knockout은 사용자가 그렇게하기를 원하지 않습니다. 그래서 그들은 당신을 내버려 두지 않습니다! 이런 식으로 디버깅하는 것이 항상 좋은 방법입니다. Chrome의 개발자 도구 또는 방화범과 같은 항목을 확인하십시오. –

0

당신은 afterAdd 핸들러이 도움이

<!-- ko foreach: { data: data, afterAdd: myhandler } --> 
    <div ... show something </div> 
<!-- /ko --> 

희망을 사용하여 foreach는 동안 기능을 실행 할 수 있습니다.

+0

유용한 팁을 주셔서 감사합니다. 지금 사용해보십시오. – Sam

+0

addAfter를 사용하면 좋았지 만, 마음에 들었던 것에 100 % 적합하지 않았습니다. 루프에서 나중에 검사 할 플래그를 초기화하고 싶습니다. 플래그가 초기화되지 않은 루프의 첫 번째 반복에서 문제가 발생했습니다. 이 매우 더러운 해킹을 사용했습니다. 나 자신을 좋아하지 않아. 더 쉬운 방법이 있나요? "인라인"자바 스크립트를 허용 할 맞춤 바인딩을 작성할 가치가 있습니까? 어쩌면 내가 그만한 길을 갈거야. – Sam

+0

@Sam - 달성하고자하는 것을 보여주는 바이올린을 게시하면 더 쉬운 방법을 찾을 수있을 것입니다. 나는 전에 그런 인라인 js를 필요로하지 않았다. – madcapnmckay

관련 문제