2014-10-11 3 views
1

Я разрабатывал страницу с использованием нокаута. Я связать массив с HTML следующимИзменение значений внутри привязки данных в нокауте

данные:

{'options':[{'name':'hi'},{'name':'hello'}]) 

HTML:

<div data-bind="foreach: options"> 
     <div data-bind="text: name, css: name"></diV> 
    </div> 

Каждый вариант есть изображение и я с помощью CSS спрайтов. и имя класса, как

div.option- <name>

Css:

div.option-hi{ 
    background-color:black; 
} 
div.option-hello{ 
    background-color:black; 
} 

Так что это будет работать, только если я могу добавить

«DIV. опция- "

к атрибуту name внутри привязка данных. В любом случае, я могу достичь этого без изменения массива и добавления еще одного атрибута в массив заполнения.

ответ

1

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

Таким образом, вы можете сделать конкатенацию внутри css связывания:

<div data-bind="foreach: options"> 
    <div data-bind="text: name, css: 'option-' + name"></div> 
</div> 

Demo JSFiddle.

+0

Awesome, Как насчет других операций с цепочкой? если моя переменная имени имеет некоторый символ подчеркивания и если я хочу удалить их внутри привязки данных. есть ли способ вызвать некоторую функцию js внутри привязки данных? – Sreevisakh

+2

Вы можете почти написать любое допустимое выражение javascript внутри связывания, поэтому замена также будет работать: http://jsfiddle.net/pgmvvn2n/1/. Однако, если вы обнаружите, что ставите все больше логики в привязки, настало время пересмотреть свой дизайн и ввести некоторые модели просмотра, в которых вы перемещаете эти логики. – nemesv

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