knockoutjs中的元素绑定

时间:2012-10-13 06:48:56

标签: knockout.js

var scrollheight=$('#scrollbox').attr('scrollHeight'); 

我想在不使用jquery的情况下执行上述操作。我发现我可以使用knockoutjs元素绑定 - data-bind="element: scrollbox"

但我不知道该怎么做

3 个答案:

答案 0 :(得分:1)

我想说,从阅读你的评论来看,KnockOutJS并不是你在滚动时处理ajax的最佳候选者。

This question处理window.scroll(...)功能并进行ajax来电。

答案 1 :(得分:0)

Afaik,ko没有自己的内置元素绑定。我在一些项目中创建了一个,看起来像这样:

ko.bindingHandlers.element = {
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var name = ko.utils.unwrapObservable(valueAccessor());
        viewModel[name] = element;
    }
};

但是,绑定时,我将viewmodel属性名称放在引号中,类似于data-bind="element: 'elementName'"。视图模型看起来像这样:

function MyViewModel() {
    var self = this;
    self.elementName = undefined;
    self.doSomething = function() {
        $(self.elementName).fadeOut();
    };
}

请注意,self.elementName将在undefined执行后保持ko.applyBindings。所以你应该只在点击或其他事件绑定中使用它,这些绑定在绑定viewmodel之后作为函数执行。

答案 2 :(得分:0)

添加自定义绑定

ko.bindingHandlers.scrollTo = {
    init: function(element, valueAccessor) {
        jQuery(element).show().focus();
        if (jQuery(element).position() != null) {
          jQuery(window).scrollTop(jQuery(element).position().top);
        } 
    }    
};

并在HTML中使用它:

data-bind="scrollTo: {}