我是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}
答案 0 :(得分:4)
您的categoryID
似乎是可观察的。要访问observable的值,需要将其称为不带参数的函数。
因此,您的gotoCategory
应该更像:
self.gotoCategory= function (category) {
self.chosenCategoryID(category.categoryID());
alert(category.categoryID());
};