【问题标题】:JSNI GWT jqueryJSNI GWT jQuery
【发布时间】:2012-05-30 13:24:31
【问题描述】:

我有一个文件 jQuery 来创建翻牌效果,我将其更改为 JSNI,使用原生函数但出错。我不知道怎么了。有谁能够帮我? 这是我的原生函数:

public native void flip() /*-{
$(document).ready(function () {
    $('#nav-list-example div div.back').hide().css('left', 0);

    function mySideChange(front) {
        if (front) {
            $(this).parent().find('div.front').show();
            $(this).parent().find('div.back').hide();

        } else {
            $(this).parent().find('div.front').hide();
            $(this).parent().find('div.back').show();
        }
    }

    $('#nav-list-example div').hover(
        function () {
            $(this).find('div').stop().rotate3Di('flip', 250, {direction: 'clockwise', sideChange: mySideChange});
        },
        function () {
            $(this).find('div').stop().rotate3Di('unflip', 500, {sideChange: mySideChange});
        }
    );
});
         }-*/;

【问题讨论】:

    标签: gwt jsni


    【解决方案1】:

    JSNI 101:$wnd.$($doc).ready(function($) {…

    使用$ 作为回调函数的参数应该允许在函数内部使用$ 而不是$wnd.$

    【讨论】:

    • (在 GWTP 下)知道为什么我必须使用 ViewImpl#onAttach 而不是 $.ready 吗?请参阅对我的其他问题的回答stackoverflow.com/a/35394537/1357094。谢谢
    • 现在看来我的答案(链接在上面的评论中)是 GWTP 延迟加载意味着 DOM 可以在加载所有视图/演示者之前加载。所以对于 GWT,ViewImpl#onAttach 是必要的,而不是 $.ready
    • 这适用于所有 GWT 应用程序,因为 onModuleLoad 的调用时间不早于 DOMContentLoad,也可能在之后。
    • 好的。那么在这种情况下,如果 onModuleLoad() 对完整的 DOM 元素准备很重要,那么在调用它的回调时,如何使用 $.ready() 来获得 DOM 中的所有元素?除非我错过了什么?这里的想法是在对元素进行 $ jQuery 选择之前确保元素在 DOM 中?
    【解决方案2】:

    我总是用这个:

    $wnd.jQuery($doc).ready(function(){});
    

    在函数内部,你可以给jQuery做一个“别名”,例如:

    function(){
      var _ = $wnd.jQuery;
      // go on....
    }
    

    希望对你有帮助:)


    顺便说一句:这就是我们在 GWT-Bootstrap 中的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-26
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多