3

我是 knockout.js 的新手,我敢肯定,我在这里遗漏了一些简单的东西。我在列表中有一个对象列表,我只想选择其中一个并从中获取一个属性以加载更多数据。

JS:

 function category(data) {
                this.categoryName = ko.observable(data.CategoryName);
                this.categoryID = ko.observable(data.CategoryID);
            }

            function CatalogViewModel() {

                //Data
                var self = this;
                self.categories = ko.observableArray([]);
                self.chosenCategoryID = ko.observable();

                //Behaviours
                self.gotoCategory= function (category) {
                    self.chosenCategoryID(category.categoryID);
                    alert(category.categoryID);
                };

                $.getJSON("/api/catalog", function (allData) {
                    var mapped = $.map(allData, function (item) { return new category(item) });
                    self.categories(mapped);
                });
            }

            ko.applyBindings(new CatalogViewModel());

这是我的 HTML:

 <ul data-bind="foreach: categories">
            <li>
                <a  data-bind="click: $parent.gotoCategory"><label data-bind="text: $data.categoryName"></label></a>
            </li>
        </ul>

这些项目完美地列出了但是当我单击和项目时,我希望得到我的 categoryID 但我得到了一堆 javascript,而不是看起来像一个试图评估和论证的函数。

我在这里想念什么?

编辑 - 这是我在警报中收到的内容:

function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d}function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d}
4

1 回答 1

4

看来你categoryID是一个可观察的。要访问 observable 的值,您需要将其作为不带参数的函数调用。

所以,你gotoCategory应该看起来更像:

            self.gotoCategory= function (category) {
                self.chosenCategoryID(category.categoryID());
                alert(category.categoryID());
            };
于 2012-05-16T13:21:31.190 回答