2017-09-12 52 views
0

反映我一直在使用這個例子在我的淘汰賽JS項目實施自動完成自動完成更新源沒有在淘汰賽JS

http://cameron-verhelst.be/blog/2014/04/20/knockoutjs-autocomplete/

它正在與我最初填充的源數據。但稍後,我更改了應用了我的自動完成功能的文本框的焦點事件上的源數據。但是,自動完成彈出窗口未填充更新後的源數據。 通過結合是這樣

<input class="form-control" type="text" style="margin-right:15px;border:0px;" data-bind="value:ConditionData,event:{ focus:assignAutoCompleteArray },autoComplete: {selected:selectedOption, options:options}" placeholder="Key"> 

而且我通過這種方式改變我的源

self.assignAutoCompleteArray = function (attribute) 
     { 
      debugger; 
      var attr = attribute; 
      var tokenListData = ruleTokenList.map(function (element) { 
       return { 
        label: element.label, 
        value: element.value, 
        object: element 
       }; 
      }); 
      attribute.options = ko.observableArray(tokenListData); 
     } 

我的視圖模型是這樣的

var criteria = function() { 
     debugger; 
     var self = this; 
     self.ID = ko.observable(); 
     self.ConditionData = ko.observable(); 
     self.Value = ko.observable(); 
     self.AndOr = ko.observable(); 
     self.Operator = ko.observable(); 
     self.Children = ko.observableArray([]); 
     self.AndOrList = ko.observableArray([{ key: 'And', value: 'And' }, { key: 'Or', value: 'Or' }]); 
     self.operators = ko.observableArray(operatorList); 
     self.IsActive = ko.observable(); 
     self.IsVisibleAddChild = ko.observable(false); 
     self.selectedOption = ko.observable(''); 
     self.options = ruleTokenList.map(function (element) { 
      return { 
       label: element.label, 
       value: element.value, 
       object: element 
      }; 
     }); 
     self.AddChildAttribute = function() { 
      var newAttr = new criteria(); 
      self.Children.push(newAttr); 
     } 

     self.SaveFilter = function (attribute) { 
      self.IsVisibleAddChild(true); 
     } 

     self.assignAutoCompleteArray = function (attribute) 
     { 
      debugger; 
      var self = this; 
      var tokenListData = ruleTokenList.map(function (element) { 
       return { 
        label: element.label, 
        value: element.value, 
        object: element 
       }; 
      }); 

     } 
    } 

問題是什麼

謝謝 Utpal

回答

2

您正在替換observableArray,而不是僅僅更改它的內容。 Knockout已經約束的那個不再存在。你應該做

attribute.options(tokenListData); 

給它新的內容。

+0

如果我這樣做attribute.options(tokenListData);它給錯誤選項不是函數 – Utpal

+0

無論你傳遞給函數需要什麼'options'都被定義爲'observableArray'。關鍵是你創建'observableArray'而不是多次。 –