Я пытаюсь связать свой массив нокаутов с таблицей, но не могу достичь модели вне функции javascript.
Вот мой код javascript
(function (conf, $, undefined) {
var model = { menuRows : [], orderRows : [], menuDetails : null };
conf.getMenuRows = function () {
$.get("/orderpackage/row", function (data) {
model.orderRows = data;
});
};
conf.getMenuRows();
ko.applyBindings(model);
}(window.conf = window.conf || {}, jQuery));
И это HTML
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>Beskrivning</th>
</tr>
</thead>
<tbody data-bind="foreach: model.orderRows">
<tr>
<td data-bind="text: description"></td>
</tr>
</tbody>
</table>
model.orderRows не найден.
Не могу понять, что я тут делаю неправильно.
ваши модели не используют функцию наблюдаемого массива. Вам понадобится следующее:
function Model() {
var self = this();
self.menuRows = ko.observableArray();
self.orderRows = ko.observableArray();
self.getMenuRows = function() {
$.get("/orderpackage/row", function (data) {
self.orderRows = ko.observableArray(data)
});
....
}
Затем вы можете позвонить
(function (conf, $, undefined) {
var model = Model();
model.getMenuRows();
ko.applyBindings(model);
}(window.conf = window.conf || {}, jQuery));
Затем вы должны иметь возможность связываться, как вы делаете в своем HTML. Дополнительные руководства можно найти здесь: http://learn.knockoutjs.com/
Если вы хотите связать элементы в каждом из элементов массива, например, описание, вам нужно будет создать дополнительное определение модели для строки и проанализировать данные, возвращаемые с вашего api, на тип модели.
Я нашел хорошее решение
(function (conf, $, undefined) {
var model = {
menuRows: ko.observableArray([]),
order: ko.observableArray([]),
menuDetails: ko.observable()
};
conf.getMenuRows = function () {
$.ajax({
url: "/orderpackage/row",
cache: false,
type: "GET",
datatype: "json",
contenttype: "application/json;utf8"
}).done(function (data) {
model.order(data.model);
});
};
conf.getMenuRows();
ko.applyBindings(model);
}(window.conf = window.conf || {}, jQuery));