2017-01-26 4 views
3

В попытке обнаружить некоторые проблемы с производительностью, с которыми мы сталкиваемся с Aurelia в IE 11, я попытался просто зарегистрировать таймер, чтобы отслеживать достигнутый прогресс. При этом я заметил странное поведение во время итерации repeat.for.Aurelia repeat.for call function несколько раз

<div repeat.for="i of 100"> 
    <div if.bind="lastElement(item, $last)">${$index}</div> 
</div> 

с функцией и объема

var count = 0; 

lastElement(item, last){ 
    count++; 
    if(last === true){ 
     console.log('Last Item: ' + JSON.stringify(item)); 
     console.log(count); 
    }; 
    return true; 
}; 

... и со следующим результатом:

Last Item: 99 
100 
Last Item: 99 
169 

Для меня результат должен был быть:

Last Item: 99 
100 

По какой-то причине существует несколько итерати или проверки этой функции. Может ли кто-нибудь объяснить мне, что здесь происходит?

ОБНОВЛЕНИЕ: Я смог найти внешний файл jdanyho и создать Gist для демонстрации. Тем не менее, теперь я получаю 150 вместо 169. Хмммм ...

+0

Ooh, вы правы. Есть 50 дополнительных вызовов, я удаляю свой ответ. – slackmart

+0

Я пробовал один и тот же пример в локальном ('" GET /jspm_packages/npm/[email protected] HTTP/1.1 "200') и работает так, как ожидалось. Это может помочь: https://github.com/gist-run/gist-run/issues/22 – slackmart

+0

Мы также работаем локально с 1.0.8, и я обновляю Gist до исходных файлов jdanyho и тех же результатов. – dbarth

ответ

0

Функция lastElement вызывает больше времени, чем число itens, потому что вы выполняете привязку с функцией, и в этом случае система привязки aurelia делает (имеет таймер для вызова функции, чтобы увидеть, изменилось ли значение). Чтобы избежать грязной проверки, вы можете использовать декоратор @ compputedFrom.

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

Есть много блог об этой теме, но вы можете прочитать официальное сообщение: http://blog.aurelia.io/2015/04/03/aurelia-adaptive-binding/

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