如何在ajax请求周期性自动刷新时使用knockout.js数据绑定
How to use knockout.js data binding when ajax request periodically auto refreshes?
在我的应用程序中,我每隔5秒定期进行一次ajax调用,以从服务器获取新的更新。
我来自服务器的ajax数据是JSON数组,看起来像:[{"foo":"valx","bar":"valy"
},{"foo":"valw","bar":"valz"}]
我的ajax代码是:
(function update() {
$.ajax({
type : 'GET',
url : url,
data : {
},
dataType : "json",
global : false,
success : function(content, textStatus, jqXHR) {
myViewModel = content;
ko.applyBindings(myViewModel);
},
complete: function() {
setTimeout(update, 5000);
},
error: function( xhr, textStatus ) {
}
});
})();
我的HTML是:
<tbody data-bind="foreach: myViewModel">
<tr>
<td data-bind="text: foo"></td>
<td data-bind="text: bar"></td>
</tr>
</tbody>
但这不起作用,我在第一次ajax调用后出现错误:不能对同一元素多次应用绑定。
你很接近。您只调用applyBindings
一次。相反,您应该在视图模型上设置observable
属性。
以下是如何设置视图模型:
function ViewModel() {
var self = this;
self.data = ko.observableArray();
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
然后,当您有新数据时(例如,在ajax
呼叫中):
$.ajax({
success : function(content, textStatus, jqXHR) {
viewModel.data(content);
}
});
注意:您可以通过几种不同的方式设置数据。如果您希望定时事件在视图模型之外,则可以使用视图模型实例(在我的示例中为viewModel
)来访问属性并更新它们。如果需要,可以将定时事件放置在视图模型中,然后调用self.data(content)
(或类似的东西)。
相关文章:
- 在Knockout中绑定数据后获取数据
- 为knockout.js数据绑定加载多个远程数据源
- 如何在ajax请求周期性自动刷新时使用knockout.js数据绑定
- 在href跳转到另一个html元素之前,执行Knockout.js数据绑定:点击函数
- 为什么我的数据绑定到一个计算函数不起作用(使用knockout.js和jade)
- Knockout.js复杂的表数据绑定
- 如何通过 KNOCKOUT 中的数据绑定值更改 css 中规则的值
- 使用 Knockout.js 在文本区域中添加数据绑定和静态文本
- 如何通过 KNOCKOUT 的自定义数据绑定使
- 的
- 项最初隐藏
- 使用数据绑定(KNOCKOUT.js)加载requirejs模块
- KNOCKOUT.js - 模态的延迟数据绑定
- Knockout Js 的渲染方式与基于 Json 值的 if 数据绑定不同
- 如何在数据绑定后在 KNOCKOUT js 中使用“with”访问另一个原型对象
- 如何防止knockout.js数据绑定中的字符转义
- Knockout JS-将数据绑定到我的表
- 如何数据绑定Knockout中接受参数的方法
- Durandal/Knockout-在绑定之前从服务器数据创建viewModel
- 为什么Knockout.js数据绑定到checkedValue会覆盖observable
- 无法使用jQuery触发Knockout数据绑定
- 如何在Mvc帮助器中使用Knockout's数据绑定属性,如Html.EditorFor()