2014-10-08 31 views
1

我习惯从ASP.NET中加载部分视图和用户控件,并根据请求加载一些数据。在看到Knockout组件后,我试图弄清楚如何做与文档类似的事情,但无法弄清楚。通过AJAX调用将数据加载到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吗?

回答

0

只是使用jQuery的的getJSON(假设你的JSON提供给客户端) 一旦你的数据在通过该方法应用到你的观察到的阵列...

好的做法是提取的基础数组观察到的,一个推一个新值然后标记可观察到的数组突变

一旦从服务器具有JSON的这篇文章应该帮助你更新你观察到的数组: Update Knockout.js Observable from JSON

+0

我已经知道如何将数据推入我的viewmod el或者数组,我在问一个更进一步的问题,并将这个功能包装在一个组件中,以便将数据按需加载到Knockout 3.2组件中 – dgarbacz 2014-10-09 12:45:54

+0

我真的不知道组件如何增加值...也许你的想法是延伸? http://knockoutjs.com/documentation/extenders.html你可以创建一个服务,接受一个json的模式,然后你可以将观察者附加到这个模式的端点上,然后将工作委托给服务来检索数据,自动将它放入VM中?你可以简单地做一个扩展,看起来像这样:this.name = ko.observable(one).extend({jsonExt:{jsonParam:'people',mode:'foreach'}}); – 2014-10-09 20:56:50

+0

这可以做一些事情,如调用服务并注册您的observable,以便每次调用更新数据时都可以使用,还可以通过扩展订阅observable以自动发布有关更改的数据。 – 2014-10-09 20:57:54

相关问题