【发布时间】:2015-09-18 19:50:06
【问题描述】:
我看过this question 和this other 的一篇关于该主题的文章,但似乎都没有解决我的问题。
我正在尝试为表格的每一行中的元素初始化一个 javascript 插件(BootStrap javascript 工具提示)。
为此,表格必须在 DOM 中呈现。这就是问题所在。
据我所知,knockout.js 没有提供正确的方法来了解 foreach 何时呈现整个表格。
我试图通过应用我发布的第一个链接中提供的解决方案来解决它,即通过创建自定义绑定,但这在我的情况下不起作用。 我猜是因为数据是通过 AJAX 调用调用 API 来显示的。
ko.bindingHandlers.doSomething = {
update: function (element) {
console.log("table loaded???");
//applying the tooltip
$('.actions').tooltip({
title: 'Actions'
});
}
};
function ViewModel(){
var self = this;
self.myItems= ko.observableArray(['A', 'B', 'C']);
//emulating the delay of calling an external API
self.getdata = function(){
setTimeout(function(){
self.myItems.push('D');
self.myItems.push('E');
self.myItems.push('F');
}, 200);
};
self.addItem = function () {
this.myItems.push('New item');
};
//getting the data on loading
self.getdata();
}
ko.applyBindings(new ViewModel());
我不希望在foreach 情况下使用 Knockout.js 提供的 afterRender 回调,因为这样插件必须在每次迭代时初始化,而不是在最后只初始化一次。
我找到的唯一解决方案是在应用工具提示插件之前应用setTimeout,但这远非理想:
ko.bindingHandlers.doSomething = {
update: function (element) {
console.log("table loaded???");
setTimeout(function(){
//applying the tooltip
$('.actions').tooltip({
title: 'Actions'
});
}, 2000);
}
};
另一种解决方案是在从 API 获取数据后调用tooltip 插件:
//emulating the delay of calling an external API
self.getdata = function(){
setTimeout(function(){
//simulating
$.get(url, function(data){
self.orders(data);
self.loading(false);
$('.actions').tooltip({
title: 'Actions'
});
});
}, 200);
};
有没有更好的方法?
【问题讨论】:
-
你见过Knockstrap吗?它具有绑定以帮助弥合淘汰赛和引导程序之间的差距。第一个例子是工具提示 - 可以帮助你吗?
标签: knockout.js knockout-3.0 knockout-3.2