我正在开发一个基于@TheoHeselmans演示文稿的应用程序,使用Knockoutjs来启用Domino应用程序。
我被困在一点。
我正在尝试使用以下代码在网页上显示Domino视图
self.mainclient.subscribe(function(newValue) {
$.getJSON('../api/data/collections/name/json', function(data) {
var mappedClients = $.map(data, function(item) { return new ClientRow(item); });
self.renewals(mappedClients);
});
}
);
function ClientRow(data) {
this.Status = ko.observable(data.Status);
}
它不返回任何数据 - 或显示错误,但我在Domino控制台上看到servlet已启动。
我按如下方式设置可观察元素:
self.renewals = ko.observableArray([]);
self.allclients = [{clientName: "ACME COMPANY"},{clientName: "GG Inc"}];
self.mainclient = ko.observable('');
通过从下拉列表中选择mainclient来设置它:
<select class="form-control" id="MainClient" data-bind="options: $root.allclients, value: mainclient, optionsText: 'clientName'">
</select>
最后,模板变量设置为:
<!-- Knockout JavaScript (+ mapping plug-in and bootbox lib)
================================================== -->
<script src="[DB]js/knockout-3.2.0.js"></script>
<script src="[DB]js/knockout.mapping-latest.js"></script>
<script src="[DB]js/bootbox.min.js"></script>
<!-- Templates -->
<script type="text/html" id="renewal-template">
<tr>
<td data-bind="text: Status" /></td>
</tr>
</script>
<script src="[DB]pages/ko_renewals.js"></script>
以及将其称为:
的HTML<table class="table table-striped table-condensed"><tr class="warning"><th>Status</th></tr>
<tbody data-bind="template: { name: renewal-template', foreach: renewals }">
</tbody>
</table>
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
<pre>
元素不返回任何内容 - 即使它放在<table>
或<tbody>
内。如果放在<select>
元素内,它会返回值。
我想要显示的视图是
对我所遗漏的任何帮助都将不胜感激。
由于
格雷姆
答案 0 :(得分:0)
排序。
function Renewal(data) {
this.Country = ko.observable(data.Country);
this.Status = ko.observable(data.Status);
this.updatelink = data['@link'] || '';
}
function AppViewModel() {
var self = this;
//create empty observable Array
self.renewals = ko.observableArray([]);
self.allclients = ko.observableArray([]);
self.mainclient = ko.observable('');
//Get list of Countries
$.getJSON('../api/data/collections/name/(lookupclient)', function(data) {
self.allclients(data[0].Client);
self.mainclient(self.allclients[0]);
}
);
//trigger an AJAX request to get tastings when the main country selection changes
self.mainclient.subscribe(function(newValue) {
$.getJSON('../api/data/collections/name/json?count=5&keys=' + newValue, function(data) {
var mappedRenewals = $.map(data, function(item) { return new Renewal(item); });
self.renewals(mappedRenewals);
});
});
}
ko.applyBindings(new AppViewModel());
var vm = ko.dataFor(document.body); //for debugging