2013-06-18 3 views
7

У меня есть viewModel на моей странице, на которой хранятся данные для обзора текущих состояний некоторых устройств. Пока все работает отлично, за исключением одной проблемы: мне нужно установить атрибут title элемента div в зависимости от другого значения в моей модели viewModel.Knockout.js: условно связать атрибут title div

Я знаю, что вы можете в основном установить атрибут заголовка, как это (в атрибуте данных связывания в сНу тега):

attr: { title: 'Some title' } 

Использование оператора выше, «Некоторое название» получает значение в подсказке при зависание div. можно также установить это:

attr: { title: ConnectState.Value() } 

и выводит правильное значение (целое значение) из моих текущих данных ViewModel, поэтому ViewModel получает заполняется правильно.

Теперь мне нужно изменить что-то вроде этого:

attr: { 
    title: { 
    'Text 1': ConnectState.Value() == 0, 
    'Text 2': ConnectState.Value() == 1, 
    'Text 3': ConnectState.Value() == 2, 
    'Text 4': ConnectState.Value() == 3 
    } 
} 

В приведенном выше примере будет только дать «[объект Object]» в качестве заголовка (соответственно в подсказке.). Как я могу это исправить? Большое спасибо!

+1

Почему бы вам не написать 'атр: {название: 'Текст' + (ConnectState.Value() + 1)}' Или фактическая текст сложнее вашего примера? – nemesv

+0

К сожалению, это так. Значение ConnectState - это перечисление, которое переводится как «подключенное», «отключенное», «соединение» и т. Д. – Robert

ответ

9

Определите ko.computed в вашей модели.

self.ConnectTitle = ko.computed(function() { 
    return 'Text ' + (self.ConnectState.Value() + 1).toString(); 
}); 

Тогда: -

attr: { title: ConnectTitle } 

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

+0

Спасибо за ваше предложение. Атрибут title, который мне нужно установить, существует в строке таблицы с привязкой к данным: Поэтому мне нужно применить эту функцию ConnectTitle к каждому элементу в моей коллекции представлений модели «Rows», которая динамически , в зависимости от страницы. Я не мог понять, как этого добиться. – Robert

+1

Каждая из ваших строк представлена ​​объектом, правильно? Отправьте свою модель просмотра Javascript, и мы посмотрим. –

+0

Вот дамп Json типичных представленийМодель данных: http://jsfiddle.net/AMLk7/ – Robert

2

Вы можете использовать тройной оператор, что-то вроде этого:

attr: { 
    title: ConnectState.Value() == 0 ? 'Text 1' : 
     ConnectState.Value() == 1 ? 'Text 2' : 
     ConnectState.Value() == 2 ? 'Text 3' : 
     'Text 4' 
} 
Смежные вопросы