Плагин JQuery UI Stars не загружен в обратный вызов .load - PullRequest
1 голос
/ 22 февраля 2012

Я новичок в jQuery и не могу определить, почему этот плагин не существует в контексте обратного вызова.У меня есть страница asp.net с главной страницей.

Вот код в голове мастера:

<!-- jquery ui css -->
<link href="/css/jquery-ui-1.8.17.custom.css" rel="stylesheet" type="text/css"/>
<link href="/css/master.css" rel="stylesheet" type="text/css"/>    

<!-- jquery -->
<script type="text/javascript" language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!-- jquery ui -->
<script type="text/javascript" language="javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>  
<!-- custom menu code -->
<script type="text/javascript" language="javascript" src="/js/fg.menu.js"></script>   
<!-- stars -->
<script type="text/javascript" language="javascript" src="/js/jquery.ui.stars.js"></script> 
<script type="text/javascript" language="javascript" src="/js/master.js"></script> 

<asp:ContentPlaceHolder id="outerHead" runat="server" />

Затем на странице default.aspx у меня есть несколько вложенных обратных вызовов, использующих jQuery.load() следующим образом:

$(document).ready(function () {

            if (jQuery().stars) {
                alert('LOADED');// IS LOADED HERE
            } else {
                alert('NOT LOADED');
            }

            // load top products
            $("#topProducts").html(ajaxLoaderBar).load("/topproducts.aspx?count=3 #main", function () {

                if (jQuery().stars) {
                    alert('LOADED'); // IS LOADED HERE
                } else {
                    alert('NOT LOADED');
                }

                // setup rating history
                $(".showRatingHistory", $("#topProducts")[0]).click(function () {

                    if (jQuery().stars) {
                        alert('LOADED');
                    } else {
                        alert('NOT LOADED'); // IS NOT LOADED HERE
                    }

                    $(this).hide();
                    var vendor = $(this).parents(".rpt-container").find("#vendorName").html();
                    $(this).next().html(ajaxLoaderBar).load("/ratinghistory.aspx?showThumbnails=false&vendor=" + vendor + " #main", function () {
                        $('.editRatingLink').click(function () {
                            if (jQuery().stars) {
                                alert('LOADED');
                            } else {
                                alert('NOT LOADED');  // IS NOT LOADED HERE
                            }

                            // load dialog

                        });
                    }).css("overflow-y", "scroll").css("border", "1px solid #eee");
                });

                // Create stars from :radio boxes
                $(".stars", $("#topProducts")[0]).stars({
                    cancelShow: false,
                    split: 2,
                    callback: function (ui, type, value) {
                    }
                });
            });
        });

Комментарии показывают, где на странице указано, что jQuery (). Stars определены.Я не понимаю, как определить область действия плагина 'stars', который я пытаюсь использовать (http://orkans -tmp.22web.net / star_rating /), и почему он работает в обратном вызове внешней загрузки, но невнутренний.Помогите!

* РЕДАКТИРОВАНИЕ *

Итак, я разработал способ сделать эту работу.Мне неясно, почему плагин jquery stars ui, по-видимому, не существует во внутренних обратных вызовах .load, но мне удалось решить эту проблему, внедрив следующий код для принудительной загрузки плагина:

Replace

    if (jQuery().stars) {
        alert('LOADED');
    } else {
        alert('NOT LOADED'); // IS NOT LOADED HERE
    }

На мой вопрос:

    // ensure the stars plugin is available
    if (!jQuery().stars) {
        $.getScript('/js/jquery.ui.stars.js')
    };

Таким образом, если плагин недоступен, он будет загружен в текущем контексте обратного вызова .load.У меня работает, но я до сих пор не понимаю, как определяется область действия плагина.Спасибо!

EDITED Я изменил исходный код, чтобы показать, что я загружаю загрузку только #main div на дочерних страницах

* ВНОВЬ ИЗМЕНЕНО *

Хорошо, это сводит меня с ума ... Я разогнал его через 24 часа ...

Можно немного jQueryГуру объясните мне, почему:

    <script language="javascript" type="text/javascript">
        $(document).ready(function () {

            // load top products
            $("#topProducts").html(ajaxLoaderBar).load("/topproducts.aspx?count=3 #main", function () {

                // EXISTS HERE
                console.log(jQuery().stars);  // Firebug displays: function()            

                $(".showRatingHistory", $("#topProducts")[0]).on("click", function (event) {

                    // DOES NOT EXISTS
                    console.log(jQuery().stars); // Firebug display: undefined

Это как-то связано с областью действия плагина виджета jquery ui, который я пытаюсь использовать, но я не совсем понимаю ...

...