2012-04-26 3 views
4

При расширении функциональности Knockout, когда это целесообразно использовать пользовательские привязки против расширителей и пользовательских функций с помощью «fn»? Есть ли последствия для производительности при выборе одного над другим?Расширение нокаута с помощью настраиваемых привязок, расширителей или настраиваемых функций

ответ

13

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

На данный момент не существует большой разницы между удлинителями и добавлением к .fn. Расширители были добавлены в KO немного раньше, чем общие функции были доступны через .fn.

Обычно это не проблема, но наполнители будут работать как для наблюдаемых, так и для вычисляемых наблюдаемых. Используя .fn, вам нужно будет добавить функции к ko.subscribable.fn, чтобы они были доступны обоим. Однако в некоторых случаях ваша функциональность может применяться только к той или иной, поэтому использование ko.observable.fn и ko.computed.fn было бы лучшим выбором.

Я считаю, что расширение .fn является самым чистым синтаксисом. Если вы обязательно вернете this или новый тип, если вы его обертываете, то вы можете легко поддерживать цепочку. Расширители немного более ясны и гарантируют, что поверхности поверхности API по-прежнему остаются скудными (для чего это стоит).

+0

Hi, @RPNiemeyer. Что вы подразумеваете под словом «Расширители», немного более ясными и гарантируют, что поверхности поверхности API по-прежнему остаются скудными (для чего это стоит) ». –

+0

@David - Расширители явно указаны в том, что вам нужно вызвать '.extend' и передать конкретный расширитель и данные. Вы ясно понимаете, что используете расширитель и какой. Кроме того, когда вы обновляете один из объектов .fn, он делает эту функцию доступной для всех экземпляров, что означает, например, что наблюдаемый будет иметь потенциально всевозможные новые методы, основанные на расширении '.fn'. , что может вызвать путаницу (что встроено и что такое расширение?). Даже с учетом сказанного, я всегда предпочитал расширять '.fn' по причинам, упомянутым выше. –

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