Новичок с Knockout, пытаясь это наше, чтобы увидеть, если я могу использовать его ... так голые со мной пожалуйста ....Обновить iScrollView после Knockout.js Еогеасп
Создание веб-приложений с JQuery Mobile/Knockout. JS/iScrollView. У меня есть список, который я заполняю, используя Knockout.js foreach. Я делаю запрос ajax, я получаю объект JSON, я вставляю его в свой наблюдаемый массив и обновления моей страницы, показывая мне все, как мне это нужно.
Теперь я хочу использовать iScrollView, так как список растет, у меня может быть приятный гладкий прокрутка вниз и использовать преимущества pullup или dropldown.
Я не могу понять, как правильно позвонить $(element).iscrollview('refresh')
в нужное время, чтобы он отрегулировал размер окна прокрутки после того, как добавлено больше предметов.
Есть ли способ подождать, пока все предметы будут вставлены в DOM, а затем нажмите $(element).iscrollview('refresh')
.
Вот мой HTML
<div data-role="page" id="List" data-bind="event: {pageshow: loadItems}">
<div data-role="content" data-iscroll>
<button value='load' data-bind="event: {click: loadItems}">load more stuff</button>
<ul data-role="none" class="list" data-bind="foreach: items">
<li style="visibility:hidden">
<div class="header">
<h3 data-bind="text: name"></h3>
<p></p>
</div>
<div class="feat-list-btn feat-list-action">
<img src="image.png" />
</div>
<div class="feat-list-btn feat-list-comments">
<img src="image.png" />
</div>
<img data-bind="attr: {src: imageurl}" />
</li>
</ul>
</div>
</div>
Вот как я получаю содержание:
function List(){
var self = this;
self.loadItems = function(){
$('#List [data-role="content"]').fadeOut(0);
$.mobile.showPageLoadingMsg();
jQuery.ajax({
url: mybackend.php',
type: 'POST',
data: 'howMany=10',
dataType: 'jsonp',
jsonp: 'jsoncallback',
success: function(data, textStatus, jqXHR){
for (i=0;i<data.items.length;i++){
self.items.push(data.items[i]);
}
},
complete: function(){
$.mobile.hidePageLoadingMsg();
}
});
};
self.items = ko.observableArray();
self.updateScroller = function(){
//????????
};
}
я могу решить эту проблему, делая
setTimeout(function(){$('#List [data-role="content"]').iscrollview('refresh');}, 1000);
Но я предпочел бы не полагаться на setTimeOut, чтобы получить такие вещи, как это сделано ...
Любые предложения или критика была бы оценена в этом случае ...
Спасибо ..
Почти ...Я понял это вчера вечером, и я отправлю ответ через секунду ... это заставит разметку писать до загрузки изображений, что означает, что мой iScroll будет подстраиваться под размер этой разметки, содержащей NO images .. слишком короткий –