我在模式对话框上有一个选择元素和一个文本输入元素。我想从选择输入中选择一个选项并使用该值来预填充文本输入元素(这只是帮助用户使用预填充的名称,然后允许用户根据需要覆盖该名称)。
我有一个车库里的汽车清单,它们都有一个型号和一个名字。
var carTypes = [{"id":1,"name":"Audi"}, {"id":2,"name":"BMW"}, {"id":3,"name":"Mercedes"}];
var Car = function() {
var self = this;
self.typeId = ko.observable();
self.name = ko.observable();
self.typeName = ko.computed(function() {
var nam = $.grep(carTypes, function(item) { return item.id == self.typeId(); });
return name;
};
}
var ViewModel = function() {
var self = this;
self.carTypes = carTypes;
self.selectedCar = ko.observable();
self.saveCar = function() {
// push the data from selectedCar to self.cars array
// close the dialog
};
self.editCar = function(item, event) {
self.selectedCar(item);
// display the dialog
};
self.cars = ko.observableArray([]);
}
ko.bindingHandlers.initialName = {
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var value = ko.utils.unwrapObservable(valueAccessor());
bindingContext.$data.name(value);
}
};
ko.applyBindings(new ViewModel());
<div data-bind="foreach: cars">
<div data-bind="click: editCar">
<div>Type: <div data-bind="text: typeName"/></div>
<div>Name: <div data-bind="text: name" /></div>
</div>
</div>
<div id="carDialog">
<div data-bind="with: selectedCar">
<select data=bind="options: $root.carTypes, optionsText: 'name', optionsValue: 'id', value: typeId", optionsCaption: 'Pick a car type'></select>
<input data-bind="value: name", initialName: carTypeName"/>
</div>
</div>
我编写了一个自定义绑定处理程序来帮助我,但不确定我是否做得对,或者我是否可以使用订阅来实现类似的功能typeId
?
如果我有一辆车保存了以下数据:
{ typeId: 2, name: 'My new BMW'}
问题是当我选择此项目进行编辑时,名称总是显示“宝马”,而不是“我的新宝马”
这个明显简单的问题成为m'colleagues 的笑柄,他们指责我选择淘汰赛,理由是它在jQuery 中会多么简单。
如果代码不完整但我的实际实现稍大但我希望我提供了足够的相关代码来解释问题,请提前提供任何帮助和 apols 谢谢