knockout autogrow binding删除更改事件绑定

时间:2013-04-18 12:07:25

标签: javascript knockout.js custom-binding autogrow

我有一个jquery自动增长插件的自定义绑定,可以在这里看到Autosize knockout custom binding autosize on load

参考代码:

ko.bindingHandlers.autogrow = {

            init: function (element, valueAccessor, allBindingsAccessor) {
                ko.applyBindingsToNode(element, { value: valueAccessor() });

                ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
                    //$(element).data('autosize').remove();
                });

                $(element).autosize({ append: "\n" });

                $(element).focus(function () {
                    $(element).trigger('autosize');
                });
            }
        };

我使用它如下:

 <textarea id="autogrow" class="text-nm span2" data-bind="autogrow: AreaProcessName, attr: { id: 'AreaProcessName' + Id }, event: { change: ViewModel.vmAreaProcess.SetAreaRevision($data) }"></textarea>

attr绑定仍在工作,但更改时的事件绑定已停止工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

jsfiddle.net/sujesharukil/3p9bj/17 这似乎工作得很好。我所做的就是从change事件中删除($ data)。我在第一篇评论中指出的原因是你设置了类似

的东西
data-bind="event: {'someevent': func()}

本质上正在发生的事情是,someevent的even处理程序被设置为func()调用的返回。由于您的函数ViewModel.vmAreaProcess.SetAreaRevision没有返回处理函数,因此当实际触发even时它不会进行回调,因为func()是立即执行的。

当你像这样设置时

data-bind="event: {'someevent': func}

你实际上是将'someevent'绑定到func处理程序。触发事件时将执行func。希望能清除它吗?