0

我有以下代码,我相信 ViewModel 的结构正确(我可能错了),但我似乎无法正确访问这些值。

JavaScript 片段

注意:我正在使用带有 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”的方式似乎无法正常工作。

我看到以下内容(请注意,文本字符串是绑定的,所以我知道淘汰赛正在做它的事情):

在此处输入图像描述

我知道这可能是我的一个简单的疏忽,但我似乎看不到它,谷歌让我空了(可能是因为我不确定要搜索什么)。

4

2 回答 2

3

在您的 PersonItem 中,您将 firstName 定义为变量声明时的私有属性。这表明它仅在类本身内部可见。

尝试将其更改为

this.firstName = firstname;

你也可能不想考虑使用 observables,如果值会改变会产生。

this.firstName = ko.observable(firstname);
于 2013-08-03T17:53:44.893 回答
0

这是因为您的 firstName 被声明为 var 所以它是函数内部的私有变量,而不是构造函数返回的对象的属性。改用. this.firstName_var firstName

您在 jsfiddle 中工作的代码:http: //jsfiddle.net/hC5Hf/

您的函数缺少右括号,并且激活在 vm 中被注释掉,因为它在您的示例中不存在。

于 2013-08-03T17:56:38.953 回答