2012-04-24 3 views
0

Я использую knockout.js, чтобы сделать мой взгляд, я получаю данные с сервера и связывание, как это ..knockoutJS вызывающих ошибки остановки сценария с вложенным Еогеаспом

var viewModel = ko.mapping.fromJS(data); 
ko.applyBindings(viewModel, $("#macro-wrapper")[0]); 

Моего вид ... Я обрезается несколько битов из ..., но обязательными являются такими же ...

<div data-bind="foreach: Data"> 
<h3> 
    <a href="#" data-bind="text: Site.Name"></a> 
</h3> 
<div id=""> 
    <div data-bind="foreach: Comments"> 
     <div class=""> 
      <div class="" data-bind="click: $root.showContent"> 
      <a ></a> 
      </div> 
      <span> 
       <a data-bind="attr: { 'href': Url }, text: SomeText"></a> 
      </span> 
      <span class=""> 
       <span class="" data-bind="text: ADate"></span> 
      </span> 
     </div> 
    </div> 
</div> 

в базе данных содержится массив объектов, и в каждом из этих объектов другой массив ... Там около 500 предметов, которые должны быть оказаны.

В то время как я тестировал, у меня не возникло никаких проблем, но при развертывании, будь то медленный компьютер, я не знаю, но они получают «Этот скрипт медленный - остановка?» сообщение. Если вы нажмете «Нет» пару раз, он отобразит.

Каковы методы работы с большими наборами данных в нокауте? В идеале я хотел бы, чтобы рендеринг выполнялся async и позволял пользователю продолжать свою работу, пока он занят работой ...

Свойства на самом деле не подлежат наблюдению - это одноразовый рендер ... ничего не будет меняться. Я использую API сопоставлений для удобства.

UPDATE: ОК, поэтому я внес изменения и не использовал отображение api больше - страница загружается, но все еще медленно ... любые идеи? var viewModel = data;

+1

У меня есть некоторые клиенты, жалующиеся на то, что мой веб-сайт, основанный на нокауте, медленно работает на старших маках в сафари 4. Пока не понял. Какой браузер (ы) используют ваши пользователи? –

+0

хром, IE9 и 8. Частная проблема с IE8 – SteveCl

ответ

2

Событие клика запускается для каждого элемента. Это случилось со мной раньше.

Относительно того, что предыдущий плакат сказал re: связывая 500 элементов на странице, мне приходилось связывать более 500 элементов на странице раньше, а стоимость производительности почти ничтожна в более современных браузерах (вы можете заметить некоторое замедление на 7-8, но не так уж плохо). Я бы посоветовал не использовать плагин отображения при преобразовании большого json-объекта. Отображение KO сравнивает каждый элемент с каждым другим элементом (чтобы проверить уникальность), поэтому вы можете понять, почему конвертированные 500 элементов замедлят его.

0

Я думаю, что показать 500 элементов на странице не очень хорошая идея с точки зрения пользовательского интерфейса. Возможно, вы должны показывать только элементы верхнего уровня и иметь ссылки «Показывать комментарии», а только давать комментарии по запросу пользователя. Или только визуализируйте первые элементы верхнего уровня X с помощью subitem и получите ссылку «Показать больше». Или используйте комбинацию вышеуказанных методов. Это мой план решения одной и той же проблемы на моем веб-сайте.

+0

Спасибо, к сожалению, это не мой призыв! И пользовательский интерфейс был хорошо разработан. Я рекомендовал пару подходов ... Я должен сказать, хотя они очень маленькие предметы ... и 500 из них на самом деле не так много. Я действительно подходил к нему под другим углом ... создавая несколько вызовов ajax и используя отложенные объекты в jQuery ... он все еще не идеален, но он просто загружается, не удерживая выкуп UI. – SteveCl

Смежные вопросы