通过AJAX调用将数据加载到Knockout组件中

时间:2014-10-08 13:51:27

标签: javascript ajax knockout.js

我曾经在ASP.NET中使用一些数据加载部分视图和用户控件。在看到Knockout组件之后,我试图弄清楚如何使用文档做类似的事情,但无法弄清楚。

任何人都可以帮我一个简单的例子来说明如何做一些简单的事情,比如把一张桌子装满数据,然后根据点击的行加载一个Knockout组件?

<tbody data-bind="foreach: unapprovedNotes">
    <tr>
        <td><a href="#" data-bind="click: fetchNote(id())">Fetch this record</a></td>
    </tr>
</tbody>

<div id="note-preview-template">
    <client-information params="???"></client-information>
</div>

ko.components.register('client-information', {
    viewModel: function(params) {
        var self = this;

        self.someProperty = params.???
    },
    template: { element: 'note-preview-template' }
});

self.fetchNote = function(id) {
    //AJAX call that would load the data into <client-information>
}

因此,单击该链接将进行AJAX调用以按需加载组件的数据。我不需要在页面加载时加载组件,但是希望在我的应用程序的其他地方重用该组件并采用类似的行为。

是否值得使用组件,还是应该创建第二个包含所有功能的viewmodel?

1 个答案:

答案 0 :(得分:0)

只使用Jquery的getJson(假设你向客户端提供json) 一旦你通过那个方法得到数据,就把它应用到你的可观察数组......

好的做法是提取observable的底层数组并逐个推送新值,然后将observable数组标记为mutated

从服务器获得Json之后,这篇文章应该可以帮助您更新可观察数组: Update Knockout.js Observable from JSON