JSNI GWT jquery

4

我有一个使用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});
        }
    );
});
         }-*/;
2个回答

7

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

使用$作为回调函数的参数,可以在函数内部使用$代替$wnd.$


(在GWTP下)你有没有想过为什么我不得不使用ViewImpl#onAttach而不是$.ready?请参见我的另一个问题的答案http://stackoverflow.com/a/35394537/1357094。谢谢。 - cellepo
现在看来,我的答案(在上面的评论中链接)是说GWTP懒加载意味着DOM可以在所有视图/Presenter加载之前加载。因此,对于GWT而言,ViewImpl#onAttach是必要的,而不是$.ready。 - cellepo
所有GWT应用程序都是如此,因为onModuleLoad被调用的时间不早于DOMContentLoad,可能会在其之后。 - Thomas Broyer
好的。那么,在这种情况下,如果onModuleLoad()对于完整的DOM元素准备是很重要的,那么使用$.ready()如何在其回调被调用时期望拥有所有DOM元素?除非我漏掉了什么?这里的想法是确保在对其进行$ jQuery选择之前,一个元素已经存在于DOM中? - cellepo

4
我经常使用这个:

我总是使用这个:

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

在函数内部,您可以创建一个对jQuery的“别名”,例如:

在函数内部,您可以创建一个对jQuery的“别名”,例如:

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

我希望这能帮到您:)
顺便说一下:这就是我们在GWT-Bootstrap中的做法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接