2015-06-16 1 views
0

У меня есть привязка данных по массиву foreach.Как использовать текущий объект в вычисленном наблюдаемом? - Knockout.js

Я хочу получить доступ к текущему объекту или месту в вычисленном наблюдаемом (как это происходит с привязкой данных click).


Пример:

Вот мой Вид:

<tbody data-bind='foreach: items'> 
 
    <tr data-bind="attr: {class:$root.changeClass()}"> 
 
    <td data-bind='text: name'></td> 
 
    </tr> 
 
</tbody>

И вот вид-модель:

function model() { 
 
    var self = this; 
 
    self.items = ko.observableArray(itemArray); 
 
    self.changeClass = ko.computed(function(data) { 
 
    //code that depends on data 
 
    return 'someClass'; 
 
    }); 
 
};


Я новичок. Пожалуйста помоги. Заранее спасибо.

+0

просто вызывать функцию, не нужно вычислять. попробуйте это http://jsfiddle.net/LkqTU/24692/. cheers –

+0

Не похоже ли, что только привязка данных 'click' передает объект? –

ответ

1

Попробуйте что-то вроде этого

Вид:

<table data-bind='foreach: items'> 
    <tr data-bind="attr: {class:$root.changeClass($data)}"> 
    <td data-bind='text: $data'></td> 
    </tr> 
</table> 

Css:

.classEven{ 
    color:blue; 
    } 

.classOdd{ 
     color:red; 
    } 

ViewModel:

function model() { 
    var self = this; 
    self.items = ko.observableArray([1,2,3]); 
    self.changeClass =function(data) { 
    //code that depends on data 
     if(data%2) return 'classEven'; 
     else return 'classOdd'; 
    }; 
}; 

ko.applyBindings(new model()); // This makes Knockout get to work 

рабочий образец скрипта here

+0

, когда я передал переменную '$ data' в вычисленную наблюдаемую, я получил предупреждающее сообщение с просьбой сделать вычисленный наблюдаемый« доступным для записи »? Почему так? Большое спасибо, кстати. –

+0

не использовать вычисление использовать обычная функция, как указано выше. –

+0

проверить обновленную скрипку o/p условно применяя цвета. –

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