Я новичок в Knockout, и я должен сказать, что часто меня путают, когда следует использовать ()
. Есть ли общий совет/трюк, касающийся того, когда вы будете использовать ()
против, когда вы этого не сделаете, потому что на данный момент я просто делаю проб и ошибок. Если привязка выдает ошибку или не обновляет значения, я удаляю ()
else, который я помещаю.
Когда следует использовать круглые скобки в нокауте
Ответ 1
Вы используете ()
в нокауте при использовании наблюдаемых или при выполнении любого другого метода.
Нокаут-наблюдаемые - это функции, вызываемые, чтобы вернуть вам то, что вы ищете, или позволить вам назначать новые значения.
В нокауте вы используете object.property()
для получения значения и object.property(newValue)
, чтобы присвоить значение этому свойству.
На нокауте веб-сайт проверьте документацию, в частности раздел наблюдаемых, в котором показано использование ()
при запросе и записи наблюдаемых данных.
Цитата:
var myViewModel = {
personName: ko.observable('Bob'),
personAge: ko.observable(123)
};
Чтобы прочитать текущее значение наблюдаемых, просто вызовите наблюдаемое без параметров. В этом примере myViewModel.personName() будет return 'Bob', а myViewModel.personAge() вернет 123.
Чтобы записать новое значение наблюдаемому, вызовите наблюдаемое и передайте новое значение в качестве параметра. Например, вызов myViewModel.personName( "Mary" ) изменит значение имени на "Mary".
Чтобы записать значения в несколько наблюдаемых свойств объекта модели, вы можете использовать синтаксис цепочки. Например, myViewModel.personName('Mary'). personAge (50) изменит имя значение "Мэри" и возрастное значение до 50.
Нокаут интерактивный учебник также очень хорош и хорошо стоит.
Ответ 2
Мне кажется, что существующие ответы пропускают очень важную точку смущения: data-bind
attributes.
Верно, что вы используете parens, когда находитесь в Javascript, и получаете или устанавливаете наблюдаемые. Но когда вы пишете data-bind="text: property"
, вы оставляете парны даже при работе с наблюдаемыми.
Изменить
Как отмечено в комментарии ниже, привязки, являющиеся выражениями или доступными свойствам наблюдаемых объектов, требуют parens
visible: personName().length > 0
visible: person().Name().length > 0
visible: person().isVisible
Обратите внимание, что последний person
и isVisisble
являются обоими наблюдаемыми, но последнее свойство не использует parens! Причиной этого является то, что мы будем передавать значение привязке вместо наблюдаемого, и оно не будет обновляться.
Ответ 3
В основном, когда вы работаете с наблюдаемым значением (массив или иначе), вы должны использовать круглые скобки, чтобы получить значение и установить значение.
var something = ko.obserbable();
something(5); //set value
console.log(something()); //get value: 5
Причина в том, что большинство реализаций JS не поддерживают геттеры и сеттеры для свойств, поэтому наблюдаемые были реализованы таким образом, чтобы обойти это ограничение.