2013-02-25 56 views
0

我有一个自定义knockout绑定装置,我希望在加载页面时自动装载。Autosize加载时自定义装订自动装订

这是问题的代码

例的fiddle

ko.bindingHandlers.autogrow = { 

init: function (element, valueAccessor, allBindingsAccessor) { 

    ko.utils.registerEventHandler(element, 'focusout', function() { 
     var observable = valueAccessor(); 
     observable($(element).val()); 
    }); 

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

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

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

update: function (element, valueAccessor) { 
    var value = ko.utils.unwrapObservable(valueAccessor()); 
    $(element).val(value); 
    $(element).trigger("autosize"); 
    } 
}; 

var vm = {}; 
vm.Data = ko.observable("This is a lot of text and has to display correctly"); 

ko.applyBindings(vm); 

HTML的例子:

<textarea id="autogrow" class="text-nm span2" data-bind="autogrow: Data"></textarea> 

会发生什么事是我有很多的文字,我想显示在文本区域,但金额每次都有所不同,所以我没有设置的金额会显示我知道的手。我想要做的是在敲除绑定已经应用后,我想触发autosize插件的autosize事件,但我无法弄清楚何时何地。

感谢

回答

2

我有可能误解了这个问题,但是这个工作在FF ATLEAST

http://jsfiddle.net/3p9bj/13/

我删除了更新功能,让自动调整做引擎盖

下它的事我也使用价值绑定更新值

ko.applyBindingsToNode(element, { value: valueAccessor() }); 
+0

感谢男人的魅力 – Armand 2013-02-25 12:29:05

+0

上面的例子不起作用,因为jquery auto resize的路径被解析为404.即使使用正确的路径,它可以在第一次加载时工作,但在尝试键入文本区域时似乎会崩溃。不知道海报,但这是我需要的自动调整大小。 http://jsfiddle.net/3p9bj/24/ – MrB 2013-09-15 02:48:54