2012-10-18 37 views
3

我有一个SharePoint的母版页,在母版页中,我尝试从列表中检索一些数据,并在使用我之前提到的母版页的网站页面中显示它们。如何在母版页和网站页面之间进行通信?

但问题是,当我尝试将我在母版页中检索到的数据存储到隐藏字段时,我无法获取最新更新的数据。我尝试使用cookie(一种jquery插件)来存储数据并将它们放入网站页面中,而不是使用隐藏字段。但我也无法获得最新的数据。

最后,我发现了一个问题:在主页的document.ready()方法之前调用了方法页面'document.ready()方法,因此即使页面回发,我也总是得到旧数据。

我可以有任何更好的方式来沟通母版页和网站页面吗?

或者是否有任何方法来确保在网站页面document.ready()之前调用母版页的document.ready()方法?

我发现了一个丑陋的方法来解决这个问题:我使用setTimeout("getTabTips()",1000);使网站页面'document.ready()在母版页后调用。但实际上,它并没有如此完美!我真的很想找到这个问题的一个美丽的答案,请帮助我?

回答

1

我有一个类似的问题,经过一些研究后,我得出了相同的结论:使用cookies。我将它封装在一个叫LocalConnection的小类中:https://github.com/jeremyharris/local_connection

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'); 
}); 

用的LocalConnection这不是完全必要的。当接收者读取cookie时,事件就会排队等候,所以主人可以“触发事件”,接收者页面打开时会触发它们。

+0

我用'setTimeout()'来推迟网站页面'document.ready()'的调用,并且问题消失了。但它不是很好,甚至有点笨拙。所以我很想在这里找到一个更好的方法... – JacobChan

+0

我上面使用LocalConnection的例子会告诉您的母版页,当你的子页面准备好了。你给它一个镜头? – jeremyharris

+0

真的很帅,我会用在我公司的共享点项目中。这是一个很酷的事情。 – JacobChan

相关问题