Ok, название может быть немного запутанным, так что я объясню ...Нокаут: пользовательские привязки для observableArray, который делает только тогда, когда полный
Я пишу пользовательские привязки, к которому я буду передать observableArray. Этот наблюдаемый массив заполняется асинхронно, а элементы задвигаются один за другим.
Проблема заключается в том, что моя пользовательская привязка называется (метод update
) каждый раз, когда наблюдаемыйArray мутирован. Что имеет смысл, но что не полезно в этом случае, потому что это означает, что первый элемент получает визуализированный n раз, где n - длина наблюдаемого массива, а второй элемент визуализируется n-1 раз, с только nth элемент визуализируется один раз.
Может кто-нибудь объяснить, аккуратный метод, имеющие обязательную силу только делать что-то, когда либо
- observableArray полностью заполнен, или
- , когда был добавлен элемент, который еще не был вынесен обычаем пользовательская привязка?
Я могу придумать пару способов обойти это, используя дополнительное свойство/наблюдаемое в качестве флага родительской модели представления, в которой говорится, что «полностью заполнено, вы можете отображать элементы сейчас» или свойство на каждом из элементы, которые говорят «вы меня уже оказали». Тем не менее, это неловко, особенно, поскольку объекты внутри наблюдаемого массива также обладают свойством observableArray.
Нет ли лучшего решения для нокаута/MVVM для этой проблемы?
UPDATE: Для ясности, что я строю на вершине что-то вроде этого
<domElmnt data-bind="myBinding: { collection: TypeGroups }" />
где
TypeGroups = ko.observableArray();
и где элементы, содержащиеся в TypeGroups
являются экземплярами другого вид-модель с наблюдаемыми свойствами.
Каждый раз, когда я вызываю TypeGroups.push(obj)
, пользовательская привязка вызывается еще раз.
Наблюдаемый массив не должен переписывать элементы, которые не менялись. Попробуйте добавить привязку, которая отображает 'new Date()', чтобы проверить, действительно ли это происходит. Что-то вроде '' –
Пользовательская привязка находится на наблюдаемом массиве или элементах? –
Наблюдаемый массив не является рендерингом; происходит то, что каждый раз, когда наблюдаемыйArray мутирует, он вызывает пользовательскую привязку, которая затем перебирает все элементы в наблюдаемом массиве - даже те, которые уже обработаны. – awj