如何将ko_autocomplete字段的源绑定到observableArray?

时间:2015-06-30 04:17:39

标签: jquery knockout.js autocomplete

我正在使用淘汰赛,我想用observableArray值创建自动完成文本框字段。

我可以绑定自动完成并在页面准备好后过滤值,但是当我添加更多或更改observableArray源的值时,它根本不会更改该自动完成字段上的源值。我仍然在UI上看到observableArray的旧值,但如果我记录检查它,它会向我显示新值。

我想知道如何让自动完成字段的来源获取observableArray的新值?

第一个初始值

     if @kind == 'location'
      @locations = if data.config?.locations?
                  $.map data.config.locations, (x) => new Location x
                 else
                  []
      @resultLocations = ko.observableArray []
      @resultLocationsUI =  ko.observableArray(@locations[0..5])
      @offset = 0
      @maximumSearchLength = data.config?.maximumSearchLength

2nd创建HTML标记并绑定值

   %input.autocomplete-location-input.ux-search.w25{ ko(autocomplete: :value, value: :value,update: "resultLocationsUI()", source: "resultLocationsUI()", valueUpdate: 'afterkeydown', css: { error: :error }, attr: {id: "'location-input-' + code"}), type: :text }
   %button{ko(click: :loadMoreLocations)} load more

第三次将更多数据加载到自动完成源

    loadMoreLocations: =>
     startIndex = (@offset * 5)+1
     endIndex = startIndex + 5
     @offset = @offset + 1
     @resultLocationsUI(@resultLocations())

1 个答案:

答案 0 :(得分:0)

当数组本身发生更改时,可观察数组仅更新 ,例如当该数组中的对象上的属性发生更改时。它只是不关心数组成员内部的变化,只要整个成员(以及数组)发生变化。

可观察数组在添加或删除元素时通知更改。它们不会通知对作为数组元素的对象属性的更改。如果您希望发生,则必须使元素对象属性可观察。