jQuery, MVC, jSon - построение таблицы div, заполненной обратными вызовами - PullRequest
1 голос
/ 22 июня 2010

Я пытаюсь построить таблицу с динамически создаваемой информацией.

Моя мысль заключалась в том, чтобы поместить DivA внутри каждой из ячеек, а затем поместить DivB и DivC внутри тегов DivA (DivB показывает «загрузочный» img, а DivC показывает содержимое). Затем я хотел бы, чтобы ячейки обновлялись с помощью вызовов json для моего веб-приложения ASP.Net MVC. Пока это звучит безумно?

<div class="divA">
    <h2>
        Stuff</h2>
    <div class="divB">
        <img src="Images/ajax-loader.gif" />
        <span>Loading</span>
    </div>
    <div class="divC">
    </div>
</div>

Используя этот код, я думал, что смогу активировать свой метод и обработать обратный вызов?

$(document).ready( 
    function() 
    {
        $("div.divA").each(
            function(i)
            {
               updateCellDivs($(this));
            }
         );
    }
 )

Однако ... Я получаю исключение при попытке вызвать show при загрузке ниже - вызов fadeIn тоже самое. Объект «loading» имеет тип disphtmldivelement, но также и DivA.

Я в растерянности - что я делаю не так?!

Спасибо за любые комментарии,

Андерс, Дания.

updateCellDivs = function(DivA)
    { 
        jQuery.getJSON("/Home/GetSomething",
        function(json)
        {
            mainDiv  = DivA[0];

            divs = $("div", mainDiv);

            loading  = divs[0];
            contents = divs[1];

            // Abort if there is no data to update.
            if (contents.length==0)
            {
                return;
            }

            loading.show(1000);
            //contents.fadeOut(1000);

            // If no response was given, the data was not yet available.
            // Ask again in two seconds!
            if (json == "")
            {
                setTimeout(updateCellDivs, 2*1000);
                return;
            }                

            DivA.fadeOut(1000);
            //loading.fadeOut(1000);


            DivA.fadeIn(1000);

        });         
    }

1 Ответ

1 голос
/ 20 декабря 2010

Проблема с этими двумя строками

loading  = divs[0];
contents = divs[1];

индексатор jQuery возвращает фактический элемент html. поэтому вы не можете выполнять какие-либо функции jQuery, например show / hide, непосредственно над ними Вам нужно будет обернуть их в объект jQuery следующим образом:

loading  = $(divs[0]);
contents = $(divs[1]);

см. Живую демонстрацию работы здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...