user3189157
user3189157

Reputation:

model property is not defined

I am making a simple knockout app, but I am getting an error "Error: Unable to parse bindings. Message: ReferenceError: gpaBasedScolarship is not defined; Bindings value: visible: gpaBasedScolarship"

My code is:

$(document).ready(function () {
    $.get("/api/Values", function (data) {
        console.log(data);
            function studentModel(name, number, age, gpa) {
                var self = this;
                self.studentName = name;
                self.studentNumber = number;
                self.age = age;
                self.gpa = ko.observable(gpa);
                self.gpaBasedScolarship = ko.computed(function () {
                    if (gpa > 3)
                        return true;
                    else
                        return false;   
                });
            }
            function studentViewModel() {
                var self = this;
                //editable data
                self.students = ko.observableArray(data);
            }
            ko.applyBindings(new studentViewModel());
    });
});

What gives?

PS: My html is...

<div id="body">
    <div data-bind="foreach:students">
        <h1>Student</h1>
    <div><input type="text" data-bind="value:studentName"/></div>
    <div><input type="text" data-bind="value:studentNumber"/></div>
    <div><input type="text" data-bind="value:age"/></div>
    <div>
        <p><input type="text" data-bind="value:gpa"/></p>
        <p data-bind="visible: gpaBasedScolarship"><input type="text" data-bind=""/></p>
    </div>
        </div>
</div>

Upvotes: 0

Views: 287

Answers (1)

Daniel A. White
Daniel A. White

Reputation: 190907

You haven't told knockout to map your data into a studentModel.

var mappedData = ko.utils.arrayMap(data, function(item) {
    return new studentModel(...);
});
self.students = ko.obserbableArray(mappedData);

Upvotes: 2

Related Questions