带REST服务的Knockout.js-结合父/子数据
我对击倒非常陌生,但我真的很喜欢它,与旧的手动技术相比,它确实有很大的不同 我目前正在开发一个单页应用程序,用于显示从用户分机拨打的电话。我创建了一些REST服务:带REST服务的Knockout.js-结合父/子数据,rest,knockout.js,single-page-application,Rest,Knockout.js,Single Page Application,我对击倒非常陌生,但我真的很喜欢它,与旧的手动技术相比,它确实有很大的不同 我目前正在开发一个单页应用程序,用于显示从用户分机拨打的电话。我创建了一些REST服务: GET/extensions-返回当前用户可用的分机号码列表 GET/calls/-返回在给定分机上进行的呼叫列表 在我的SPA中,我想列出每个分机的一张表,显示有关电话的数据,但不确定根据我的视图模型应该采取什么角度 目前,我的想法如下: function extension(extn) { var model = ko.
GET/extensions
-返回当前用户可用的分机号码列表
GET/calls/
-返回在给定分机上进行的呼叫列表
在我的SPA中,我想列出每个分机的一张表,显示有关电话的数据,但不确定根据我的视图模型应该采取什么角度
目前,我的想法如下:
function extension(extn) {
var model = ko.mapping.fromJS(extn);
model.calls = ko.observableArray(); // load calls in to here
return model;
}
function CallsViewModel() {
var self = this;
self.extnData = ko.observableArray();
$.getJSON("/extensions", null, function (data) {
self.extnData($.map(data, extension));
});
}
我首先将扩展加载到模型中,然后将调用加载到扩展对象中。但我只是在这个阶段,所以不确定这是否是理想的
对于如何处理这个问题有什么建议吗?我很乐意接受任何级别的评论,包括RESTAPI本身(尽管我认为这方面是合理的)。干杯 与REST服务交互不应该真正改变viewmodel代码的结构方式。希望您将数据访问与viewmodel代码隔离开来,这样就不必担心如何检索它们。您可以用很多方法来实现这一点,但是将它们包装到
服务对象中是一种非常常见的方法
不太确定这是否是您所追求的,因为您没有给出任何关于数据结构的提示,所以我不能确定。你肯定走在正确的道路上,但我会:
显然,当您实际进行模拟ajax调用时,它们将基于回调
这里的想法是加载扩展立即发生,但是对每个扩展的调用都是按需完成的。这听起来像是你的意思,但并不十分清楚。嘿,非常感谢你的回答,并为我在某些方面的含糊不清表示歉意——在今天结束之前,这有点让人心烦意乱。你确实把我推向了正确的方向——实际上,我只是确认我不打算在某个疯狂的切线上前进。干杯
var Call = function (data) {
this.number = ko.observable(data.number);
this.duration = ko.observable(data.duration);
};
var Extension = function (id) {
var self = this;
self.id = ko.observable(id)
self.calls = ko.observableArray();
self.callsLoaded = ko.observable(false);
self.loadCalls = function() {
var calls = ko.utils.arrayMap(dataService.getCallsMock(self.id()), function (c) {
return new Call(c);
});
self.calls(calls);
self.callsLoaded(true);
};
};
var Viewmodel = function() {
var self = this;
var extensions = ko.utils.arrayMap(dataService.getExtensionsMock(), function(e) {
return new Extension(e);
});
self.extensions = ko.observableArray(extensions);
};