rjc*_*rjc 11 javascript ajax jquery knockout.js
在我的应用程序中,我每隔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 ) {
}
});
})();
Run Code Online (Sandbox Code Playgroud)
我的HTML是:
<tbody data-bind="foreach: myViewModel">
<tr>
<td data-bind="text: foo"></td>
<td data-bind="text: bar"></td>
</tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我在第一次ajax调用后得到错误:你不能多次将绑定应用于同一个元素.
Jus*_*son 30
你很亲密 你只打了applyBindings一次电话.相反,您应该做的是observable在视图模型上设置属性.
以下是设置视图模型的方法:
function ViewModel() {
var self = this;
self.data = ko.observableArray();
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)
然后,当您有新数据时(例如在您的ajax通话中):
$.ajax({
success : function(content, textStatus, jqXHR) {
viewModel.data(content);
}
});
Run Code Online (Sandbox Code Playgroud)
注意:您可以通过几种不同的方式设置数据.如果您希望在视图模型之外定时事件,则可以使用视图模型实例(在我的示例中viewModel)来访问属性并更新它们.如果需要,可以将定时事件放在视图模型中,然后调用self.data(content)(或类似的东西).
| 归档时间: |
|
| 查看次数: |
19777 次 |
| 最近记录: |