2012-05-24 1 views
0

У нас есть большой вложенный наблюдаемый массив, отображаемый шаблонами для создания древовидного вида. Список является динамическим, но в нем есть потенциально более 1000 элементов.производительность нокаута - можете ли вы связывать свойства, если ваши объекты не наблюдаются?

У нас возникают проблемы с загрузкой и поиском этой коллекции - наиболее заметно в IE8 и iPad. Chrome выглядит нормально.

Элементы в коллекции фактически не меняются, поэтому я не думаю, что нам нужны «уведомления» об аспектах наблюдаемых, но мы хотим использовать привязку данных.

Есть ли способ сделать привязку данных к объектам в вашей модели просмотра, которые не наблюдаются? Есть ли способ создания не наблюдаемых комплексных коллекций данных без использования ko.mapping.fromJS()?

ответ

0

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

Если массив является наблюдаемым, убедитесь, что вы следуете рекомендациям в this excellent post.

Я также слышал о том, что люди получают лучшую производительность, переключаясь с родного шаблона на сторонние, такие как jquery.tmpl (не уверен, что это применимо к вам).

EDIT

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

<!-- ko if: IsSectionHeader() --> 

Это выполняется наблюдаемую IsSectionHeader для того, чтобы получить это значение. Это нормально, когда IsSectionHeader является наблюдаемым, поскольку наблюдаемые - это функции. Когда вы переключаетесь на необработанную модель, это не сработает. Я рекомендую использовать такой инструмент, как firebug, и проверить консоль ошибок, он точно сообщил об ошибке.

В любом случае, исправление заключалось в том, чтобы удалить двойные скобки. Обратите внимание, что привязки ko могут воспринимать наблюдаемые с или без скобок, даже если свойство является наблюдаемым, поэтому они не были нужны в любом случае.

Надеюсь, это поможет.

+0

Спасибо за ваш вклад. Это не так, что мы хотим сопоставить один объект с другим, а скорее хотим получить доступ к объекту для привязки свойств к шаблонам, отображающим дерево. – Beth

+0

@Beth - Я в замешательстве относительно вашей проблемы? Что вы подразумеваете под «мы хотим получить доступ к объекту для привязки»? Если вы создаете простой старый js-объект с не наблюдаемыми свойствами и используете односторонние привязки KO, такие как текст, он работает отлично. – madcapnmckay

+0

В текущей реализации мы получаем данные из переменной codebehind, чтобы вытащить ее в aspx. Когда мы добавляем его в модель представления, используя плагин отображения, например. viewModel.vmAvailablePages = ko.mapping.fromJS (dataAvailablePages); - все хорошо. Но если мы удалим оболочку отображения, например. viewModel.vmAvailablePages = dataAvailablePages - тогда мы получаем ошибки привязки. – Beth