我所拥有的是ASP.NET MasterPage / ContentPage,其中ContentPage使用UpdatePanel并将UpdateMode设置为“Conditional”。此ContentPage基本上是一个包含3个视图的MultiView:Setup,Confirm和Complete。我有点击导航按钮,转到服务器,做他们需要做的事情,最后更新UpdatePanel,以便它可以回来。我的问题在于我的JavaScript。
我有以下名为PAGE
的全局对象文字:
PAGE = {
panel : undefined,
currentView: undefined,
buttons : {
all : undefined,
cont : undefined
},
views : {
setup : {},
confirm : {},
complete : {}
}
};
我的PAGE.init()
函数如下所示:
PAGE.init = function() { console.log("PAGE.init() fired");
this.panel = $('div[id$="Panel_Page"]');
this.currentView = this.panel.find('input[id$="Hidden_CurrentView"]').val();
this.buttons.all = this.panel.find('input[type="submit"]');
this.buttons.cont = this.panel.find('input[id$="Button_Continue"]');
this.buttons.all.click(function() { PAGE.panel.hide(); });
switch (this.currentView) {
case "confirm" : this.views.confirm.init(); break;
case "complete" : this.views.complete.init(); break;
default : this.views.setup.init(); break;
}
};
最后,但并非最不重要的是,这一切都得到了启动:
// Fire events on initial page load.
PAGE.init();
// Fire events for partial postbacks.
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(PAGE.init);
我的问题是,当它首次触发时Page.init()
一切都很好,但是,当你点击一个按钮时,它会立即抛出错误:未捕获的TypeError:无法设置属性'all'的undefined 。现在我试图解决这个问题,但我很茫然。似乎这种情况发生在PAGE
的根目录下的 ANY 嵌套对象文字中。像PAGE.panel
这样的直接属性工作正常,但只要您需要访问PAGE.buttons.all
或PAGE.views.setup
,它就会抛出此错误。我以前从未见过这个。
有任何想法吗?
答案 0 :(得分:0)
为面板属性使用getter。看到其他所有东西看起来都是面板的属性,这应该这样做 - 你可能会在回发期间丢失对面板的引用,所以不是一次获取对象,而是每次都得到它:
get_panel:function(){return $ get(“Panel_Page”); }
同样,如果我只有this.panel = $ get(myElement),然后我的部分页面更新会破坏我最初创建对象时返回到this.panel的节点,this.panel将变为未定义。使用吸气剂。
希望有所帮助 - 快乐编码。
编辑:
实际上 - 现在我再次查看它,你可能想要为所有属性使用getter而不是依赖于get_panel()。find(..)for currentView,例如,我会做另一个在那里吸气:
get_currentView:function(){return $ get(“Hidden_CurrentView”,this.get_panel()); }
乙
答案 1 :(得分:0)
我没有在this
函数中使用PAGE.init()
,而是使用了PAGE
并更正了问题。显然,this
并未指代PAGE
,而是PAGE.init
。仍然不确定为什么,因为我在其他地方这样做并且有效。
例如,以下this
的使用起作用,与我在OP中的使用方式没有什么不同:
PAGE.views.setup = {
buttons : {
all : undefined,
cont : undefined
},
init: function() {
var self = this,
buttons = self.buttons;
buttons.all = PAGE.panel.find('input[type="submit"]');
buttons.all.click(function() { alert(this.id + " clicked"); });
}
}