我又迷路了。
我正在使用jquery小部件工厂。我声明了一个跟踪被访问页面的全局对象。我在一个函数中设置它,需要从另一个函数访问它,我无法工作。
有人可以告诉我,我在这里做错了什么:
(function($,window){
$.widget("mobile.multiview",$.mobile.widget, {
vars: {
hist:{},
// there is 4 panel elements, which contain several pages each
$panel:$("div:jqmData(role='panel')")
},
_create: function() {
// access vars
var self = this;
// run through all panels, retrieve each panel ID
$panels.each(function(index) {
var id = $(this).jqmData('id');
// sorry, this was pasted to quickly
// for each panel I'm setting an object
// and adding the ID of the first page (data-show="first") to the object
self.vars.hist[id] = ['#'+$(this).find(':jqmData(role="page")').attr('id')];
console.log("entry made");
//console.log("entry: "+self.vars.hist[id][0]);
});
},
crumble: function(event, data, page) {
var self = $( '#'+page.attr('id') ),
$crumPanel = $( '#'+page.attr('id') ).closest('div:jqmData(role="panel")'),
$backup = self.vars.hist[$crumPanel.jqmData('id')][self.vars.hist[$crumPanel.jqmData('id')].length-1];
// this stays undefined...
console.log( $backup );
我希望通过在全局级别声明hist
,可以访问存储的信息,类似于我在vars部分中创建的其他变量。但它不是......我想只有空对象才会全局存储。
那么如何访问填充到_create里面的对象的“本地”数据?
感谢您的帮助!
答案 0 :(得分:0)
从未使用过该小部件插件,但您可以考虑使用jQuery's .data()而不是全局变量。 你可能会这样做:
$(ElementID).data('name', '#'+$(this).attr('id'));
并在另一个函数中访问它:
var mydata = $(ElementID).data('name');
答案 1 :(得分:0)
在“崩溃”中,你将自己定义为我假设的是页面上小部件的元素?
在widget方法的上下文中,这= =插件的实例。 this.element ===在小部件上创建小部件的jquerified元素。
你想要做的事情是行不通的,因为jquerified元素没有“vars”var,小部件的原型就是这样。尝试在方法中使用console.log(this.vars.hist)来说明我的意思。
答案 2 :(得分:0)
这是一个时间问题。我设置崩溃在pagecreate
上开火,它比_create早发射。因此,我无法从崩溃中访问对象元素,因为它们没有设置。
通过绑定到_create里面的pageinit
(这取代pagecreate
事件,我也可以从其他函数调用hist对象。
我把它放在全球变量中基本上就是这样做的。在小部件范围内定义它,并使其可从所有小部件功能访问。