如何在母版页和网站页面之间进行通信?

时间:2012-10-18 06:54:43

标签: javascript sharepoint-2010

我有一个SharePoint的母版页,在主页面中,我尝试从列表中检索一些数据,并在使用我之前提到的母版页的网站页面中显示它们。

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

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

我可以更好地在母版页和网站页面之间进行通信吗?

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

我找到了一种解决这个问题的丑陋方法:我使用setTimeout("getTabTips()",1000);在主页面之后调用网站页面document.ready()。但实际上,它并没有那么完美!我真的想找到这个问题的漂亮答案,请帮助我?

1 个答案:

答案 0 :(得分: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时,事件排队并触发,因此Master可以“触发事件”,接收器页面在打开时会触发它们。