我有以下代码,我相信ViewModel的结构正确(我可能是错的)但我似乎无法正确访问这些值。
注意:我正在使用带有DurandalJS和<!-- ko compose -->
样式绑定的Hot Towel SPA模板,但我没有在此处显示以保持简单。
var vm = {
activate: activate,
title: 'People',
people: [
new PersonItem('TestFirst', 'TestLast', 'first@last.com', '111.111.1111', 'bio here'),
new PersonItem('TestFirst2', 'TestLast2', 'first2@last2.com', '222.222.2222', 'bio here')
],
mytext: 'Oh Hey There'
};
return vm;
function PersonItem(firstname, lastname, email, phone, shortbio) {
var firstName = firstname;
var lastName = lastname;
var emailAddress = email;
var phoneNumber = phone;
var shortBio = shortbio;
var fullName = function () {
return firstName + " " + lastName;
};
var imagePath = function() {
return "/Content/images/Bio_" + firstName + "_" + lastName + ".jpg";
};
var resumePath = function () {
return "/Content/Resumes/resume_" + firstName + "_" + lastName + ".pdf";
};
<div data-bind="text: mytext"></div>
<ul data-bind="foreach: people">
<li data-bind="text: firstName"></li>
</ul>
我看到一个子弹被创建,这似乎表明正在找到该集合,但我试图访问“firstName”的方式似乎无法正常工作。
我看到以下内容(请注意文本字符串是绑定的,所以我知道knockout正在做它的事情):
我知道这可能是我的一个简单的疏忽,但我似乎无法看到它并且谷歌让我空了(可能是因为我不确定要搜索的是什么)。
答案 0 :(得分:3)
在PersonItem中,您将firstName定义为变量声明的私有属性。 这表明它只在Class本身内可见。
尝试将其更改为
this.firstName = firstname;
你也可能不想考虑使用observables,如果这些值会发生变化会产生。
this.firstName = ko.observable(firstname);
答案 1 :(得分:0)
这是因为你的firstName被声明为var所以它是函数内部的私有变量,而不是构造函数返回的对象的属性。请使用this.firstName
代替var firstName
。
您在jsfiddle工作的代码:http://jsfiddle.net/hC5Hf/
您的函数中缺少右括号并且激活已在vm中注释掉,因为它在您的示例中不存在。