通常你想要的是'options'是一些数组,并且你使用'value'绑定来保持你的viewmodel与选择框同步。然后,当用户选择不同的选项时,您可以从您放入“值”绑定的同一个可观察对象中获取更新的值。
至于事件处理程序 - 第一个“数据”参数将是 koGrid 行的“视图模型”,从那里很容易访问该行的 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() );