我正在尝试计算一些值并将它们绑定到UI以及observableArray()。问题是我真的不知道该怎么做。我曾尝试使用此代码,但没有成功。这是 kodg 是我用来构建root到api动作的参数,必须返回所需的值,而 books 是绑定到UI的observableArray()。
function GrafikViewModel(grafikUri) {
var self = this;
self.kodg = ko.observable();
//Getting parameter
var kod = self.kodg();
//Passing parameter to api
var paxuri = '/api/orders/GetPax/' + kod;
self.getPax = ko.computed(function () {
$.getJSON(paxuri, function (data) {
self.getPax(data);
});
});
//How include computed values into array?
self.books = ko.observableArray();
$.getJSON(grafikUri, function (data) {
self.books(data.$values);
});
}
这是必须包含计算值的HTML。
<td>
<input type="text" id="left" class="form form-control" data-bind="value: $data.getPax" /></td>
更新即可。好的,我找到了一些允许获得计算值的解决方案,但是这个值仍然没有绑定到UI。
function GrafikViewModel(grafikUri) {
var self = this;
self.books = ko.observableArray();
self.PaxLeft = ko.computed(function() {
ko.utils.arrayForEach(self.books(), function(book) {
$.ajax({
url: '/api/orders/getpax/' + book.kodg,
dataType: 'application/json; charset=utf-8',
success: function (msg) {
return msg.d;
}
});
}, GrafikViewModel)});
$.getJSON(grafikUri, function (data) {
self.books(data.$values);
});
}
msg.d 应该是通过self.PaxLeft绑定到UI的计算值,但事实并非如此。
答案 0 :(得分:0)
如何将计算值包含到数组中?
要在observableArray中包含一个计算器,我只需从另一个viewmodel构建一个数组。然后,您可以将ko.computed函数添加到该视图模型。像这样:
var GrafikViewModel = function(data) {
var self = this;
self.Books = ko.observableArray(
ko.utils.arrayMap(data.books, function (item) {
return new BooksViewModel(item);
}));
};
var BooksViewModel = function(data){
var self = this;
self.MyComputed = ko.computed(function(){
// do something
});
};