Knockout.js/devExtreme не может обработать привязку css

У меня есть шаблон dxTileView, который привязан к данным, поступающим с сервера. Затем в шаблоне я хочу добавить привязку css, которая добавляет класс при щелчке плитки вот так...

<div data-bind="dxTileView: {itemClickAction:assignProject, dataSource:quickBooking}">
          <div data-options="dxTemplate : { name:'item' }" data-bind="css: {selectedTile: selectedTile}">
            <h4 data-bind="text: blah"></h4>
            <p data-bind="text: blah"></p>
          </div>
</div>

И затем в модели просмотра у меня есть:

var viewModel = {
        selectedTile: ko.observable(false),
        blah: blah}

И сообщение об ошибке:

Uncaught ReferenceError: Unable to process binding "css: function (){return {selectedTile:selectedTile} }"
Message: selectedTile is not defined 

Я пробовал несколько вариантов привязки следующим образом, но ни один из них не работает:

data-bind="css: {selectedTile: viewModel.selectedTile}"//error: viewModel not defined
data-bind="css: {selectedTile: viewModel.selectedTile()}"
data-bind="css: {selectedTile: true}" //this works,was just for testing
data-bind="css: {selectedTile: selectedTile(false)}"//etc etc etc

Заранее большое спасибо за любую помощь!


person rory    schedule 21.05.2014    source источник
comment
Вы можете попробовать с data-bind=css: {selectedTile: $root.selectedTile}   -  person GôTô    schedule 21.05.2014
comment
@GôTô - получилось! Можете ли вы преобразовать в ответ, пожалуйста, чтобы я отметил как ответивший и исправил? Ваше здоровье   -  person rory    schedule 21.05.2014


Ответы (1)


Чтобы получить доступ к корню вашей модели представления, используйте $root.

Попробуй это:

data-bind="css: {selectedTile: $root.selectedTile}"
person GôTô    schedule 21.05.2014
comment
Штаны, теперь привязка применяется к каждому тайлу, когда я пытаюсь обработать его через событие onclick. Думаю, мне действительно нужно изменить источник данных, чтобы он был уникальным для выбранной плитки. - person rory; 22.05.2014
comment
selectedTile звучит так, как будто он должен содержать идентификатор или объект, а не логическое значение :) - person GôTô; 22.05.2014
comment
Я так близко, но просто не могу добраться туда, есть шанс легкого толчка? Я предполагаю, что вы имеете в виду, что в модели представления selectedTile должен содержаться идентификатор или объект? - person rory; 22.05.2014
comment
Да, а затем сравните его с вашим текущим объектом в вашей привязке, например data-bind="css: {selectedTile: $root.selectedTile() == myTileId()}" - person GôTô; 22.05.2014
comment
черт возьми, я мог бы поклясться, что пробовал это раньше, я полагаю, что это должно было быть как-то по-другому! Большое спасибо за вашу помощь! - person rory; 22.05.2014