【问题标题】:Chain .ready and .resize into function?将 .ready 和 .resize 链接到函数中?
【发布时间】:2011-09-11 01:18:39
【问题描述】:

在这个对象内部,我有一个属性Response.action,它是用于同时触发jQuery 的.ready.resize 上的代码的简写。下面代码块中的注释演示了它的用法。 Response.action 适用于 .ready,但不适用于 .resize。谁能看到为什么和/或建议如何使它对两者都起作用?

window.Response = (function($, window, undefined) {

    var Response = {},  // object
        $window = $(window),
        $document = $(document); // cache selectors 

    /*
    Response.action()
    This triggers code on .ready *and* .resize 
    usage:
                Response.action( myactions );
                function myactions() { 
                    // do stuff
                }       
    */  
    action = function( code ) { 

        var code = ( code !== undefined ) ? wrap() : false; // apply wrap() if we have code

        function wrap() {
            $document.ready(function() {
                $window.resize(function() {
                    code // input
                }).resize(); // trigger resize handlers
            }); // close .ready function
        }

        return code; // wrapped code fires on .ready and .resize
    },
    Response.action = action;

    return Response; // return object

})(jQuery, window); // expose to global object

这是给responsejs.com的——完整的库(正在进行中)在那里。

我正在使用其他属性之一对其进行测试。 .band 属性本身是可靠的:

Response.action( myactions() );
function myactions() { 
        if ( Response.band(600) ) { $('header').html('600px or wider'); }
        else { $('header').html('below 600px');  }
}

更新:可行:

Response.action = 函数 ( func ) { if ( typeof func !== 'function' ) { return false; }

$(function () {
    func();
    $window.resize( func );
}).resize();

return func;

};

使用这种用法语法:

Response.action( myactions );
function myactions() { 
        // do stuff
}

*请注意,在调用中它必须是 myactions 而不是 myactions()

【问题讨论】:

  • 你缺少 var 的“action”变量......而且不仅仅是“code”,它可能应该是“code()”。
  • @ryanve 当您不声明变量时(例如 action 在您的情况下),它成为全局属性。你不想要那个。因此,在它前面放一个var
  • @ryanve 不,你肯定需要var 来“行动”。目前,它是一个全局变量。稍后将“响应”对象上的属性设置为相同的值并不重要。
  • @ryanve 那是因为您使用了逗号运算符(这是我建议反对的另一件事)。我的建议:var action = function () { ... }; // <-- semicolon here instead of comma 然后Response.action = action;
  • @ryanve 因为myactions 不返回任何内容,所以这个Response.action( myactions() ); 相当于这个myactions(); Response.action( undefined );。你可能想要这个Response.action( myactions );,对吧?

标签: javascript jquery oop object triggers


【解决方案1】:

怎么样

window.Response = (function ( $, window, undefined ) {

    var Response = {};

    Response.action = function ( func ) {
        if ( typeof func !== 'function' ) { return false; }

        $(function () {
            func();
            $( window ).resize( func );
        });

        return func;
    };

    return Response;

})( jQuery , window );

【讨论】:

  • 现在试试/谢谢。 if 绝对是处理 !code 部分的更好方法。
  • 我刚刚用工作示例更新了问题。当我发布 lib 时,我肯定会大声喊出你——谢谢 :)
  • 您认为它也可以在阵列上工作吗? » stackoverflow.com/questions/7375158/…
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多