0

我已经使用 ko.mapping.fromJS(Model) 将 ASP.NET MVC viewModel 加载到 KnockoutJS 中。

我的 viewModel 看起来像这样:

public IEnumerable<FunkyThing>funkyThings;
public FunkyThing selectedFunkyThing;

每个 FunkyThing 都有一个字符串属性 funkyThingName。映射工作正常,我可以看到表中所有时髦的东西及其名称。

我想添加一个快速刷新按钮。所以我创建了一个简单的按钮,然后将数据绑定到按钮单击到敲除功能刷新,看起来像这样:

   model.refresh= function () {
            var url = '@Url.Action(MVC.FunkyThings.RefreshJSON())';
            $.getJSON(url, function (returnedData) {                
                ko.mapping.fromJS(returnedData, {}, model.funkyThings);
            });

成功调用刷新函数,该函数又调用服务器上的 RefreshJSON 方法。服务器传回 JSON 数据——一个更新的 funkyThings 数组,当我将鼠标悬停在 chrome 的调试器中的 returnedData 上时,我可以在 chrome 中看到这些数据。

然而不幸的是,在映射函数被调用后,绑定中断:

未捕获的错误:无法解析绑定。消息:ReferenceError:funkyThingName 未定义;绑定值:文本:funkyThingName

而且我不确定为什么...?

4

2 回答 2

1

model.funkyThings可观察的吗?如果是,那么您可以尝试将其作为函数传递给映射方法:

ko.mapping.fromJS(returnedData, {}, model.funkyThings());

如果做不到这一点,你确定刷新方法返回的 JSON 的结构是正确的吗?

啊,如果你得到一个 JSON 字符串,那么你需要调用映射插件的 fromJSON 方法:

ko.mapping.fromJSON(returnedData, {}, model.funkyThings);

您可能也需要在 funkyThings 上加上括号,但不要先尝试。

于 2013-03-19T13:51:02.507 回答
1

如果返回的对象格式正确并且绑定也很好,您只需要执行以下操作:

    model.FunkyThings(returnedData).
于 2013-03-19T14:33:12.787 回答