2013-02-14 45 views
1

我想获取可观察数组中的值并将其显示在下拉列表中,但我不想将下拉列表中的值更新为可观察数组更改?由于其他原因,该阵列必须是可观察的。从可观察数组中敲除+填充值,但在数组更新时不更新值

我知道会有一个简单的方法来做到这一点!

这里是一个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> 

回答

4

这听起来像你应该只使用第二observableArray在下拉列表中的值。这样,原始观察者可以改变而不受影响。

+1

好主意,太简单了!感谢那。 – Colin 2013-02-17 08:49:59