オートコンプリートを処理するカスタム バインディングがあり、ユーザーがオートコンプリートからアイテムを選択すると、サーバーと通信して text_field を短縮名に置き換えます。問題は、これにより、カスタム バインドの「更新」機能が 2 回トリガーされることです。
Knockout.js コード (編集: 以下は CoffeeScript であることに注意してください):
ko.bindingHandlers.ko_autocomplete =
init: (element, params) ->
$(element).autocomplete(params())
update: (element, valueAccessor, allBindingsAccessor, viewModel) ->
unless task.name() == undefined
$.ajax "/tasks/name",
data: "name=" + task.name(),
success: (data,textStatus, jqXHR) ->
task.name(data.short_name)
Task = ->
@name = ko.observable()
@name_select = (event, ui) ->
task.name(ui.item.name)
false
task = Task.new()
意見
= f.text_field :name, "data-bind" => "value: name, ko_autocomplete: { source: '/autocomplete/tasks', select: name_select }"
カスタム バインドにスロットルを適用する方法はありますか?
サーバーから返された short_name に task.name を設定したときに、カスタム バインディングの 'update' 関数が 2 回目のトリガーになるのを止めたいだけです。