2014-03-27 4 views
2

어쩌면 내가 durandal에서 탐색 지점을 놓친 것일 수도 있지만 버튼 클릭에 대한보기를 실행하려면 어떻게해야합니까?durandaljs - 버튼 클릭시보기로 이동

저는 viewmodel의 클릭 기능에 버튼을 데이터 바인딩하고 있습니다. 그러나 뷰 모델이로드되면 즉시 뷰 리디렉션이 트리거됩니다.

보기 :

<button data-bind="click: gotoPage('mypage')">go somewhere</button> 

뷰 모델 :

gotoPage: function(page){ 

    router.navigate(page); 
} 

답변

2

당신이 전체의 ViewModel을 게시 할 수 있습니까? 어쩌면 리디렉션을 일으키는 무언가가 귀하의 활성화 기능에 있습니다.

define(['durandal/app', 
    'knockout', 
    'plugins/router'], 
function (app, ko, router) { 
    var vm = { 
     CurrentEntity: ko.observable(), 
     GoToPage: GoToPage 
     activate: activate 
    }; 
    return vm; 

    function GoToPage(page) { 
     router.navigate(page); 
    }; 

    function activate() { 
     // activation code here, make sure no redirect code exists here 
    }; 
); 

모델이로드 될 때 활성화 기능의 코드가 실행됩니다. 문제가 될 수있는 리디렉션 코드가있는 경우 당신이 모두 함께 기능을 우회하려는 경우에도 앵커로 버튼을 변경하고 그냥이 같은 경로에 HREF 지점을 만들 수 있습니다 : 당신이없는 모두가 앞에 해시 문자라고 생각

<a href="#/MyDurandalRoute" >go somewhere</a> 
+0

내 셋업은 예와 거의 동일 - 구조의 측면에서. 내 viewmodel 너무 큰 게시 할 수 있지만 기능을 비어 있습니다 - 코드가 전혀 없습니다. 또한 같은 방식으로 내 viewmodel 돌아갈 - VM 반환 변수, 변수 등을 선언 할 때 디버깅 할 때 'gotoPage'함수가 비록 click 이벤트가 발생하지 않는 한 . 이상한 것들. – bigerock

+0

@bigerock gotoPage 함수를 디버깅 할 때 호출 스택을보고 호출 한 내용을 볼 수 있습니까?또한 프로젝트의 모든 파일에 대해 텍스트 검색을 수행하고 gotoPage라는 단어를 찾아서 포함시키고있는 일부 js 파일에서이 단어가 호출되지 않았는지 확인한 후 이전에 이런 일이 발생했는지 확인하십시오. – Frank

0

너의 노선. 프랭크의 대답에 코멘트를 추가하려했지만 아직 평판이 충분하지 않습니다. (

+0

사실, 경로가 작동하도록 해시를 추가해야하지만, 문제는 버튼을 클릭하기 전에 모든로드에서 함수가 호출된다는 것입니다. 해시는 그 영향을받지 않아야합니다. – Frank

1

"click : gotoPage ('mypage') '는 바인딩시 평가됩니다. 바인딩 타임에 gotoPage ('mypage') '가 실행되고 결과가 click 이벤트에 바인딩됩니다.

따라서 원하는 속성을 가리키는 속성에 바인딩해야합니다.

가보기에이 작업을 수행 :

<button data-bind="click: gotoMyPage">go somewhere</button> 

을 당신의 ViewModel이 뭔가를 할 거라고 :

define([ 
    'durandal/app', 
    'knockout', 
    'plugins/router'], 
function (app, ko, router) { 
    var vm = { 
     CurrentEntity: ko.observable(), 
     gotoMyPage: GoToPage 
     activate: activate 
    }; 
    return vm; 

    function GoToPage() { 
     router.navigate('#mypage'); 
    }; 

    function activate() { 
     // activation code here, make sure no redirect code exists here 
    }; 
); 

파트 B 것은

귀하의 GoToPage 루틴이 매개 변수를 취할 수 있습니다, 예를 들어,

function GoToPage(page) { 
     router.navigate(page.mypage); 
    }; 

보기 : (listOfPages 페이지 개체의 목록을 포함, 각 페이지의 객체가 마이 페이지 요소가)

<table> 
    <tbody data-bind="foreach: listOfPages"> 
     <tr> 
      <td data-bind="text: mypage, click: gotoMyPage"></td> 
     </tr> 
    </tbody> 
</table> 

. 여기

더 많은 정보는 : Knockout documentation on foreach