2012-10-13 107 views
0
var scrollheight=$('#scrollbox').attr('scrollHeight'); 

我想做类似上面的事情,而不使用jquery。我跨过来了,我可以使用knockoutjs元素绑定 - data-bind="element: scrollbox"元素绑定在knockoutjs中

但我不知道该怎么办呢

+1

你想要的属性'scrollHeight'绑定到另一个元素的值? – Darbio

+0

没有。当滚动高度增加时,我想让ajax调用获取更多内容 –

+0

您确定要在KO中执行此操作吗?数据绑定比事件处理更重要。 '$(window).scroll(...)'应该可以解决你的问题。 – Darbio

回答

1

我想说的是,从阅读您的意见,KnockOutJS是不是在你的情况下的最佳人选在滚动上处理Ajax。

This question处理window.scroll(...)函数并进行ajax调用。

0

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

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

然而,结合的时候,我用引号把视图模型属性名称,像data-bind="element: 'elementName'"。然后,视图模型是这样的:

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

记住self.elementName仍将undefined后才ko.applyBindings执行。所以你应该只在click或其他事件绑定中使用它,这些绑定在viewmodel绑定后作为函数执行。

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: {}