【问题标题】:Knockout Viewmodel + selecteditem -> nested list "not defined"Knockout Viewmodel + selecteditem -> 嵌套列表“未定义”
【发布时间】:2014-11-11 05:32:21
【问题描述】:

我有一个视图模型

var viewModel = {
    Classes: ko.observableArray(data),
    addPerson: function() {
        SelectedClass.Persons.push(new Person(SelectedClass, " ", " "));
    },
    SelectedClass: ko.observable({
        Persons: ko.observableArray([]),
        Location: ko.observable("")
    }),
 };
 ko.applyBindings(viewModel);

我将主详细信息视图与类绑定。选择一个班级以获取该班级中的“人员”列表。

我有一个按钮可以将一个人添加到班级。 当我尝试点击它时,我得到:

ReferenceError:人员未定义。

为什么它不能在 SelectedClass 中找到嵌套的 Persons 列表并推送到该列表?

我用一些测试数据创建了一个小提琴。 http://jsfiddle.net/alexintime/n77ujya3/2/ 虽然在小提琴中我无法让显示详细信息按钮工作,因此无法填写“SelectedClass”。 但至少它是一些东西。

提前致谢

【问题讨论】:

    标签: c# javascript jquery mvvm knockout.js


    【解决方案1】:

    在 JavaScript 中,从整个对象的成员对对象属性的任何访问都应使用 this 进行限定(C# 不是这种情况,在少数情况下您需要显式使用 this ):

    // Check that you need to get "SelectedClass" property value like a function call 
    // (Knockout's getter function):
    addPerson: function() {
        this.SelectedClass().Persons.push(new Person(this.SelectedClass(), " ", " "));
    }
    

    更新,第 2 期

    this.SelectedClass 是一个可观察的属性。要访问Persons属性,需要像函数一样获取SelectedClass属性值:this.SelectedClass()

    【讨论】:

    • 感谢您的澄清,但不幸的是我仍然遇到同样的错误
    • @AlexInTime thisaddPerson 函数体中的值是多少?
    • 一个类对象,但问题出在“SelectedClass”中定义的“Persons” - 为什么我无法访问它?
    • 完全有效,虽然我的 UI 没有更新 - 它正在使用 viewModel.SelectedClass().Persons.push(new Person... 当我使用 ko.observable 时不应该更新 ui 吗?
    • @AlexInTime 要看绑定配置了,也许我今天下午看看,我很高兴至少你今天学到了一个新的 KO leason ;)
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 2017-10-26
    • 2013-04-07
    • 1970-01-01
    • 2014-10-12
    • 2010-11-29
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多