【问题标题】:Knockout JS , pushed objects' children property is not boundKnockout JS,推送对象的子属性未绑定
【发布时间】:2014-03-24 19:50:38
【问题描述】:

我正在使用 KnockoutJS 开发一个 .NET 应用程序。 .NET 中的 ViewModel 使用 knockout.mapping-latest.js 进行映射。这是demo

最初绑定的对象可以正常工作,所有“删除”事件都可以正常工作。但是当添加新对象(例如 SheetA)时,remove 事件对 SheetA 工作正常,但 SheetA 的子属性的事件失败(例如 SheetA.LineOfQuestions)。

请点击页面底部的“添加工作表”按钮,您会看到一些数据被推送,然后点击“删除组问题”按钮您会看到异常

Uncaught TypeError: Object [object Array] has no method 'remove'

【问题讨论】:

    标签: .net knockout.js


    【解决方案1】:

    您在 AddDummySheet 中的回调将结果 JSON 对象直接推送到 Sheets observableArray,因此该对象模型都不包含 observables。

    在将结果添加到 Sheets 可观察数组之前,您需要将结果映射到可观察对象

    success: function(result) {
        console.log(result);
        self.mysurvey.questionarie.Sheets.push(ko.mapping.fromJS(result));
    }
    

    【讨论】:

    • 我确认您的代码有效,但是当我阅读一些在线教程时,其中大多数将 json 对象直接推送到可观察对象 asp.net/web-api/overview/creating-web-apis/… ,这是否意味着如果它的数据只有,它有效,但如果也有事件,那么它应该是可观察到的?我仍然很好奇为什么在推送 Json 对象时绑定到第一级对象的事件会起作用。我没有将您的答案标记为正确的声誉
    • 您最初创建的 viewmodel self.mysurvey = ko.mapping.fromJS(data); 会将对象模型深度转换为 observables。
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2014-06-09
    • 2014-02-21
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多