asp.net-mvc - knockout 映射没有更新我的模型

标签 asp.net-mvc knockout.js

我在使用不绑定(bind)订阅更新的 knockout 模型时遇到问题。我有一个 C# MVC 页面,它向模板提供一个模型,该模板被解析为 Json 并作为 ko.applyBindings 的 ViewModel 分配的一部分原始提供。我订阅了一个可观察对象,它调用一个方法来执行 viewModel 数据的更新。不相关的东西被拉出来并重新命名,例如用法:

var myViewModel = function (data) {
    var self = this;

    self.CurrentPage = ko.observable();
    self.SomeComplexArray= ko.observableArray([]);

    self.Pager().CurrentPage.subscribe(function (newPage) {
        self.UpdateMyViewModel(newPage);
    });

    self.UpdateMyViewModel= function (newPage) {
        var postData = { PageNumber: newPage };
        $.post('/Article/GetMyModelSearchByPage', postData, function (data) {
            ko.mapping.fromJS(data, {}, self);;
        });
};

当我执行日志记录时,我可以看到所有数据,而且看起来都是正确的。使用相同的方法来生成初始模型和更新后的模型。我在其他页面上使用过这种技术,每次都完美无缺。然而,在这种情况下,我正在寻找它来绑定(bind)/更新 SomeComplexArray,而这并没有发生。如果我尝试手动执行此操作,则我无法在数组上获得正确的绑定(bind),我会得到空白。我想知道是否有明显我做错了的事情,而我却完全错过了。

编辑:我不知道可以将 ko.mapping 指向罪魁祸首。标准模型更改也不会影响界面。这在某种意义上是行不通的。我有一个可见绑定(bind)到数组长度的 p 元素和一个单击绑定(bind)到从 SomeComplexArray 弹出项目的函数的 div 元素。我可以在控制台日志中看到它正在执行其功能(随后的点击导致“未定义”不具有该功能)。但是,p 元素从不显示。初始数组只有 2 个项目,因此单击一下即可清空它:

<p data-bind="visible: SomeComplexArray().length === 0">nothing found</p>


<div data-bind="click: function() { UpdateArray(); }">try it manually</div>


-- in js model
self.UpdateArray = function () {
        console.log(self.SomeComplexArray());
        console.log(self.SomeComplexArray().pop());
        console.log(self.SomeComplexArray());
        console.log(self.SomeComplexArray().pop());
        console.log(self.SomeComplexArray());
});

编辑 2: 来自@Matt Burland 的评论,我已经修改了 pop 的调用方式,现在手动方法可以动态修改元素。然而,ko.mapping 仍然没有像我预期的那样运行。在测试中,我在调用 ko.mapping 之前和之后做了一个特定行的 console.log。未对 observableArray 进行任何更改。

最佳答案

我在 JSFiddle 中创建了你的 knockout 情况测试.

您必须在不带括号的情况下调用您的数组函数。我测试了这部分:

self.UpdateArray = function () {

        self.SomeComplexArray.pop();

};

它似乎在 JSFiddle 端工作。

关于asp.net-mvc - knockout 映射没有更新我的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893212/

相关文章:

html - 如何使用 epplus 将我的 html 表写入 excel 文件

c# - 何时使用 var 何时使用强类型?

javascript - KnockoutJS 处理引导日期选择器和日期格式

knockout.js - 使用 knockout/ Durandal 将无效字段标记为红色

c# - 如何验证集合类型?

c# - 在 C# 中使用 LINQ 在范围之间分组数据

javascript - 如何使用 ko.compulated (Knockout.js) 更正绑定(bind)属性

knockout.js - 如何以 knockout 容器形式处理 if/else 语句?

javascript - 为什么在这种情况下,结合在 knockout 中不起作用?

c# - 如何确定 Facebook 用户是否登录到 Facebook 从 C# 连接