Модель не доступна вне пространства имен

1

Я пытаюсь связать свой массив нокаутов с таблицей, но не могу достичь модели вне функции 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 не найден.

Не могу понять, что я тут делаю неправильно.

Теги:
knockout.js

2 ответа

2

ваши модели не используют функцию наблюдаемого массива. Вам понадобится следующее:

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, на тип модели.

0

Я нашел хорошее решение

(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));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню