从可观察数组中敲除+填充值,但在数组更新时不更新值
问题描述:
我想获取可观察数组中的值并将其显示在下拉列表中,但我不想将下拉列表中的值更新为可观察数组更改?由于其他原因,该阵列必须是可观察的。从可观察数组中敲除+填充值,但在数组更新时不更新值
我知道会有一个简单的方法来做到这一点!
这里是一个fiddle来解释我的意思和代码如下。
视图模型:
ViewModel = function() {
var self = this;
self.Owners = ko.observableArray([
{FullName: 'Bob Jones',Id: 1},
{FullName: 'Joe Bloggs',Id: 2},
{FullName: 'Joe Bloggs',Id: 2}
]);
self.GetOwners = function() {
var ownerIds = [],
addedIds = [],
count = 0;
var owners = ko.utils.arrayForEach(self.Owners(), function (owner) {
if (addedIds.indexOf(owner.Id) == -1) {
addedIds[count] = owner.Id;
ownerIds[count] = {
FullName: owner.FullName,
Id: owner.Id
};
count++;
}
});
return ownerIds;
}
self.Add = function() {
self.Owners.push({ FullName: 'Jane Doe', Id: 3 });
}
};
var vm = new ViewModel();
ko.applyBindings(vm);
HTML:
<select data-bind="options: GetOwners(), optionsText: 'FullName', optionsValue: 'Id'"> </select>
<!-- I dont want the values in this select to update when I add an owner by clicking the button below -->
<button data-bind="click: Add">Add</button>
答
这听起来像你应该只使用第二observableArray在下拉列表中的值。这样,原始观察者可以改变而不受影响。
好主意,太简单了!感谢那。 – Colin 2013-02-17 08:49:59