2015-06-05 4 views
3

У меня есть связывание данных, в которой я должен использовать два CSS классовКак добавить несколько классов CSS Использование Bindngs

data-bind ="css: isHiddenStage" 

isHiddenStage ==> функция возвращает класс CSS на основе некоторой логики, Это работает отлично, и я хочу, чтобы применить другие классы CSS на основе некоторого условия

css:{ my-class:$index() + 1 === 10 } 

Примечание: Здесь я не могу использовать isHiddenStage функцию для проверки сотрудничества ndition Так в конце концов я получил это:

data-bind ="css: isHiddenStage, css:{ my-class:$index() + 1 === 10 }" 

, который не работает, может быть потому, что я не могу использовать CSS дважды в привязке. Есть ли альтернатива.

С уважением

+1

Рассмотрим переименование 'isHiddenStage' в' getHiddenStageCssClass'. Или если вы не можете переименовать эту функцию по какой-либо причине, оберните ее. 'isHiddenStage' звучит как логическое свойство. – CrimsonChris

ответ

1

А что-то вроде:

data-bind ="css:{ isHiddenStage: true, 'my-class': $index() + 1 === 10 }" 

Таким образом, класс isHiddenStage() всегда будет применяться, поскольку его состояние всегда верно.

Обратите внимание, что я помещал 'my-class' в кавычки, потому что это не был действительный идентификатор.

Knockout documentation link source

+1

Я не уверен, что это действительно отвечает на вопрос, как я его понимаю. 'isHiddenStage' не является классом, который будет применяться (если бы это было так, вы могли бы придерживаться его в обычном атрибуте class), скорее это функция, которая может возвращать другой класс на основе логики внутри него. –

+0

@JamesThorpe Вы поняли это правильно. –

+0

В этом случае вы можете добавить дополнительный параметр isHiddenStage(), который позволит вам вывести 'my-class' в дополнение к своим нормальным значениям возврата или объединить их в новый ko.computed(), называемый calculateClass() или что-то? Если бы ваши функции были опубликованы, я мог бы дать лучший ответ. – br4d

3

Там не может быть несколько привязок CSS на одном элементе. Создайте функцию, которая возвращает все классы css, разделенные пробелами, которые будут использоваться в одной привязке css.

HTML

<div data-bind="css: getCssClassesForIndex($index)"></div> 

вид Модель

this.getCssClassesForIndex = function (index) { 
    var cssClasses = this.isHiddenStage() || ''; 
    if ((index + 1) === 10) { 
     cssClasses += ' my-class'; 
    } 
    return cssClasses; 
}.bind(this); 
+0

Ницца. Мысль о переходе в '$ index' мне не приходила –

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