我的HTML代码是:
<div data-bind="attr:{'id':id}">
<div data-bind="text:name"></div>
</div>
和js代码是:
function ViewModel(data) {
var self = this;
self.id = data;
self.name = data.name;
self.getId = function () {
var id = document.getElementById(self.id);
console.log("id is " + id);
id.scrollTop = id.scrollHeight;
}
self.getId();
}
$(function () {
ko.applyBindings(new ViewModel(5,"irfan"));
})
现在在getId
函数中如何获取id?因为我必须在该Id上应用scrollTop函数。
答案 0 :(得分:1)
我不确定我是否理解这个问题,而且我不知道如何要求你澄清。基本上,你有多个错误,使得初始意图有点难以猜测。看看这是否符合您的要求;如果没有,请解释你想做什么(这与我正在做的不同)。
function ViewModel(id, name) {
var self = this;
self.id = ko.observable(id);
self.name = ko.observable(name);
self.getId = function () {
console.log("element is ", document.getElementById(self.id()));
}
}
var vm = new ViewModel(5,"irfan");
ko.applyBindings(vm);
vm.getId();
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="attr:{'id':id}">
<div data-bind="text:name"></div>
</div>
&#13;
具体做法是:
data
仅为5
,因此data.name
为undefined
data-bind
中使用它们,id
和name
需要是Knockout observables +
(串联)应用于字符串和HTML元素,则该元素将显示为[object HTMLDivElement]
,这不是非常有用self.id
如果你将id
作为不可观察的(但随后是Knockout)就可以了不能工作);既然它是可观察的,那就需要self.id()
。编辑:对于自动滚动到底部,这个怎么样?
function ViewModel(id, name) {
var self = this;
self.stuff = ko.observableArray([]);
}
var vm = new ViewModel();
ko.bindingHandlers.scrollToEnd = {
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.utils.unwrapObservable(valueAccessor());
var scroller = element.previousSibling.previousSibling;
scroller.scrollTop = scroller.scrollHeight;
}
};
ko.virtualElements.allowedBindings.scrollToEnd = true;
ko.applyBindings(vm);
setInterval(newDataCometh, 1000);
function newDataCometh() {
var newData = (Math.random() * 100000 + 10000).toString(36); // just random gibberish
vm.stuff.push(newData);
}
&#13;
#stuff {
height: 100px;
border: 1px solid black;
overflow: scroll;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div id="stuff" data-bind="foreach: stuff">
<div data-bind="text: $data"></div>
</div>
<!-- ko scrollToEnd: stuff --><!-- /ko -->
&#13;