我有一个 SharePoint 母版页,在母版页中,我尝试从列表中检索一些数据,并将它们显示在使用我之前提到的母版页的网站页面中。
但问题是,当我尝试将母版页中检索到的数据存储到隐藏字段时,我无法获取最新更新的数据。我没有使用隐藏字段,而是尝试使用 cookie(一种 jquery 插件)来存储数据并将它们获取到站点页面中。但我也无法获得最新数据。
最后发现问题:站点页面的document.ready()
方法在母版页的document.ready()
方法之前被调用,所以我即使页面回发,也始终获取旧数据。
我能否有更好的方式在母版页和站点页面之间进行通信?
或者是否有任何方法可以确保母版页的 document.ready() 方法在站点页面的 document.ready() 之前被调用?
我找到了一个丑陋的方法来解决这个问题:我使用 setTimeout("getTabTips()",1000);
来制作站点页面的 document.ready()
在母版页之后调用。但实际上,它并没有那么完美!我真的很想为这个问题找到一个漂亮的答案,请帮帮我好吗?
最佳答案
我遇到了类似的问题,经过一番研究后我得出了相同的结论:使用 cookie。我将它包装在一个名为 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 时,事件会排队并触发,因此主控可以“触发事件”并且接收者页面会在它们打开时触发它们。
关于javascript - 如何在母版页和站点页面之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12948753/