jquery - 如何访问另一个函数中设置的对象值?

时间:2011-10-16 22:18:37

标签: jquery object widget

我又迷路了。

我正在使用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里面的对象的“本地”数据?

感谢您的帮助!

3 个答案:

答案 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对象。

我把它放在全球变量中基本上就是这样做的。在小部件范围内定义它,并使其可从所有小部件功能访问。