2012-10-18 2 views
3

저는 SharePoint의 마스터 페이지를 가지고 있으며 마스터 페이지에서 목록에서 일부 데이터를 검색하고 이전에 언급 한 마스터 페이지를 사용하는 사이트 페이지에 표시하려고합니다.마스터 페이지와 사이트 페이지간에 어떻게 통신 할 수 있습니까?

하지만 마스터 페이지에서 검색 한 데이터를 숨겨진 필드에 저장하려고하면 최신 업데이트 된 데이터를 가져올 수 없습니다. 숨겨진 필드를 사용하는 대신 쿠키 (일종의 jquery 플러그인)를 사용하여 데이터를 저장하고 사이트 페이지에서 가져옵니다. 그러나 나는 또한 최신 데이터를 얻을 수 없습니다.

마지막으로 사이트 페이지의 document.ready() 메서드가 마스터 페이지의 document.ready() 메서드보다 먼저 호출되므로 페이지 포스트 백이더라도 이전 데이터가 항상 표시됩니다.

마스터 페이지와 사이트 페이지간에 더 효과적인 통신 방법이 있습니까?

또는 마스터 페이지의 document.ready() 메서드가 사이트 페이지 'document.ready()보다 먼저 호출되도록하는 방법이 있습니까?

나는이 문제를 해결하기 위해 못생긴 방법을 발견했다. 을 사용하여 사이트 페이지 'document.ready()이 마스터 페이지 다음에 호출되도록 만든다. 그러나 실제적으로 그것은 완벽하게 작동하지 않았다! 정말이 질문에 대한 아름다운 대답을 찾고 싶습니다. 도와주세요.

답변

1

나는 비슷한 문제가 있었는데, 약간의 연구 끝에 나는 같은 결론에 도달했다 : 쿠키를 사용한다. LocalConnection이라는 작은 클래스로 래핑했습니다. https://github.com/jeremyharris/local_connection

LocalConnection은 콜백을 사용하므로 구문이 매우 친숙해야합니다. 콜백을 사용하기 때문에 다른 페이지가 준비되었음을 마스터에게 알리기 위해 콜백을 설정할 수도 있습니다.

주인이 전혀 필요하지 않습니다의 LocalConnection으로

var c = new LocalConnection({ 
    name: 'mycookiename' 
}); 
// start listening 
c.listen(); 
c.addCallback('ready', function(pageId) { 
    // sub page ready 
}); 

하위 페이지

var c = new LocalConnection({ 
    name: 'mycookiename' 
}); 
// start listening 
c.listen(); 
$(document).ready(function() { 
    c.send('ready', 'somePageId'); 
}); 

. 수신자가 쿠키를 읽으면 이벤트가 대기열에 올려지고 발사되므로 마스터는 '이벤트 실행'하고 수신자 페이지는 열 때 이벤트를 트리거합니다.

+0

'setTimeout()'을 사용하여 사이트 페이지'document.ready()'의 호출을 지연 시켰고 문제가 사라졌습니다. 그러나 그것은 너무 조그만, 심지어 조금 서투른 작품입니다. 여기에 더 좋은 방법을 찾으려고합니다. – JacobChan

+0

LocalConnection을 사용하는 위의 예는 서브 페이지가 준비되었을 때 마스터 페이지에 알려줍니다. 너 한테 총을 줬어? – jeremyharris

+0

정말 잘 생겼어. 내 회사의 쉐어 포인트 프로젝트에서 사용할거야. Thks는 백만장 자다. – JacobChan

관련 문제