通常你需要什麼是「選項」是一些數組,並使用「值」結合,讓您的視圖模型觀察到的同步與選擇框。 然後,當用戶選擇不同的選項時,您可以從您在「值」綁定中放入的相同可觀察值中獲取更新值。
至於事件處理程序 - 第一個'data'參數將是koGrid行的「viewmodel」,並且從那裏很容易訪問該行的VM數據(例如data.name()
)。
這裏有一個簡單的例子:(這裏的jsfiddle:http://jsfiddle.net/qjNUQ/1/)
HTML:
<script type="text/html" id="tmpl">
<div data-bind="kgCell: $cell">
<select data-mini="true" data-bind="options: $root.availableTypes,
value: $cellValue,
optionsCaption: 'Selecione...',
event: { change: $root.typeChanged }"></select>
</div>
</script>
<div id="grid" data-bind="koGrid: {
data: items,
columnDefs:
[{field: 'name', width: 120},
{field: 'type', cellTemplate: 'tmpl', width: 120}],
autogenerateColumns: false
}"></div>
JS:
function Item(item)
{
var self = this;
this.name = ko.observable(item.name);
this.type = ko.observable(item.type);
}
function VM() {
var self=this;
this.availableTypes = ['weapon', 'armour', 'food', 'document', 'potion'];
this.items = ko.observableArray([
new Item({ name: 'sword', type: 'weapon' }),
new Item({ name: 'city map', type: 'document' }),
new Item({ name: 'healing cider', type: 'potion' }),
new Item({ name: 'new item' })
]);
this.typeChanged = function(itemRow, event) {
console.log('type changed to ', itemRow.type(),
', for item: ', itemRow.name());
}
};
ko.applyBindings(new VM());
Antishok,馬麗娟響應!這給了我一些工作概念,將所有這些設置到我必須遵循的代碼結構上。 –