2

使此代码工作的正确方法是什么?

$(function(){

    var base = {
            $wrapper: $('.homepage_main'),
            $main: base.$wrapper.find('#primary').find('.home_slides').closest('[data-id="Colleague"]'),
            $panel: base.$wrapper.find('#sidebar').find('.home_slides').closest('[data-id="Colleague"]'),

            Template: {
                $img: function () { return $('img'); }
            },

            Modal: {
                $modalInterrupt: $('#searching_interruption'),
                Suggestion: {
                    $self: $('#suggested_colleague'),
                    $loading: base.Modal.Suggestion.$self.find('.gif_loading'),
                    $paging: base.Modal.Suggestion.$self.find('.pagination'),
                    $itemContainer: base.Modal.Suggestion.$self.find('.request_items'),
                    $itemClone: base.Modal.Suggestion.$itemContainer.find('[data-id="Clonable"]').clone().removeAttr('data-id').removeClass('hide'),
                    $lblCount: base.Modal.Suggestion.$self.find('[data-id="SuggestCount"]'),
                    $listItems: function () {
                        return base.Modal.Suggestion.$itemContainer.find('.coll_panel_content:not([data-id="Clonable"])');
                    }
                }
            }
        };
});  

Uncaught TypeError: Cannot read property '$wrapper' of undefined当您查看 Google Chrome 控制台时, 我得到了。

一些小提琴

我试着拔出$wrapper,现在我得到了新的错误:

Uncaught TypeError: Cannot read property 'Modal' of undefined   

另一个小提琴样本

我采用这种方法是因为它更易于管理。例如,如果我在我的 html 页面上更改了一些类名或 id,我只需在我的 jquery 代码中修改 1 个特定变量,一切都会再次正常。如果你知道更好的方法,请分享给我。

4

1 回答 1

4

在定义变量时,您不能使用它。所以一个更简短的例子是:

var hi = "hi" + hi.length;

因为变量还没有完全定义。

要使您的代码正常工作,请预先定义您需要的变量:

$(function(){
    var $wrapper = $('.homepage_main'),
        $modalSelf = $('#suggested_colleague'),
        $itemContainer = $modalSelf.find('.request_items');
    var base = {
            $main: $wrapper.find('#primary').find('.home_slides').closest('[data-id="Colleague"]'),
            $panel: $wrapper.find('#sidebar').find('.home_slides').closest('[data-id="Colleague"]'),

            Template: {
                $img: function () { return $('img'); }
            },

            Modal: {
                $modalInterrupt: $('#searching_interruption'),
                Suggestion: {
                    $loading: $modalSelf.find('.gif_loading'),
                    $paging: $modalSelf.find('.pagination'),
                    $itemClone: $itemContainer.find('[data-id="Clonable"]').clone().removeAttr('data-id').removeClass('hide'),
                    $lblCount: $modalSelf.find('[data-id="SuggestCount"]'),
                    $listItems: function () {
                        return $itemContainer.find('.coll_panel_content:not([data-id="Clonable"])');
                    }
                }
            }
        };
});
于 2013-04-04T06:22:50.743 回答