knockout不会通过映射更新值

时间:2013-11-21 14:00:04

标签: knockout.js

这会在UI上更新值:

PortfolioGeneral.CompanyName(item.CompanyName);

我可以手工编写这些值,但我想使用映射。但是这不起作用:

PortfolioGeneral = ko.mapping.fromJS(item);

在调用以下函数之前已经调用了ko.applyBindings。此调用应更新所有模型值。

function getPortfolioGeneral(portfolioId, PortfolioGeneral) {
    $.ajax({
        url: "/api/portfolio",
        contentType: "text/json",
        dataType: "json",
        type: "GET",
        data: { id: portfolioId },
        success: function (item) {            
            //PortfolioGeneral = ko.mapping.fromJS(item);    
            PortfolioGeneral.CompanyName(item.CompanyName);
        },
        error: function (data) {
        }
    });    
}

1 个答案:

答案 0 :(得分:2)

使用语句PortfolioGeneral = ko.mapping.fromJS(item);,您会覆盖 PortfolioGeneral的值,因此您的原始可观察属性将被替换为新的属性,因此KO无法再跟踪它们。< / p>

您需要从PortfolioGeneral对象的数据更新item属性,您可以使用以下语法执行此操作:

ko.mapping.fromJS(
   item, // the source object what you want to map
   {}, // the mapping options if you want something mapped special
   PortfolioGeneral // the target object which you want to be updated
);