2012-05-04 108 views
1

我目前使用fullCalendar.js作为我的Web应用程序的一部分。从单独窗口访问JavaScript对象

单击日历日期时,会弹出一个窗口,允许用户输入有关日历事件的详细信息并将其保存。

我希望能够从打开的窗口中触发日历对象中的函数。

Javascript有能力解决单独窗口中的对象吗?

我已经尝试了很多方式从不同的窗口访问fullCalendar()对象,但都没有工作。

东西一样 $(window.opener.document.body).find('#calendar').fullCalendar('refetchEvents');

具体我针对的refetchEvents钩。

没有这样的事情,或者它的任何变体迄今为止工作过......有很多方法可以处理对象,但没有一种方法可以在单独的文档中引用“实例”。

这是怎么回事?

是否无法从单独的窗口中引用我的日历对象?

真的很欣赏指针。

编辑------------------

我只是试着:

console.log(window.opener.calendar.fullCalendar())

这将产生一个有前途的结果,它的发现该函数,不幸的是现在所有的内部引用都搞乱了。

Uncaught TypeError: Cannot read property 'eventSources' of undefined 
m.fn.fullCalendar:8888/js/fullcalendar/fullcalendar.min.js:110 
$.ajax.successhlc.js:892 
f.Callbacks.ojquery-1.7.2.min.js:2 
f.Callbacks.p.fireWithjquery-1.7.2.min.js:2 
wjquery-1.7.2.min.js:4 
f.support.ajax.f.ajaxTransport.send.d 

除此之外,目前为止没有变化。现在实现一个新功能。

还是应对全球var calendar

+0

它是弹出的窗口还是div? – mplungjan

+0

这是一个窗口...... div不会有任何问题,因为它是相同的文档。我想保持窗口弹出,因为这个应用程序运行良好。 – Alex

+0

绑定问题? '的console.log(window.opener.calendar.fullCalendar.bind(window.opener.calendar)())'; –

回答

2

已在fullCalendar代码只是短短的一瞥......但总体来讲怎么样努力:

在打开的窗口中定义(window.opener)函数

function doRefetchEvents() { 
    alert("ok"); 
    $("#calendar").fullCalender("refetchEvents"); 
} 

然后从打开的窗口打开:

window.opener.doRefetchEvents(); 

又见window.opener on MDN

+0

我先试试这个......谢谢。 – Alex

+0

我试过这个,但不幸的是它回到未定义或作为空对象引用。好主意,但。 – Alex

+0

您是否尝试过使用相同的脚本加载两个窗口? – Alex

0

您可以尝试通过字符串化它的日历对象存储在localStorage的(https://developer.mozilla.org/en/DOM/Storage#localStorage)(HTTP://www.json .org/js.html - > JSON.stringify),然后在另一个窗口通过JSON.parse解析它来访问该对象。

+0

只是提及(正如我看了一些问题):这不会工作,因为JSON.stringify实际上没有与功能,但删除...我认为这甚至在规范中提到。另请参阅[此处](https://developer.mozilla.org/zh/JavaScript/Reference/Global_Objects/JSON/stringify)一节“描述” - 如果在转换期间未定义,函数或XML值遇到省略或审查为空 –