【问题标题】:Knockout JSON data reloading issue with ASP.NET MVC使用 ASP.NET MVC 的 Knockout JSON 数据重新加载问题
【发布时间】:2013-03-08 04:51:49
【问题描述】:

我已经使用 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

我不知道为什么...?

【问题讨论】:

  • 您能否包含来自具有原始获取而不是刷新的函数的代码?

标签: asp.net-mvc json knockout.js


【解决方案1】:

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

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

如果不行,你确定刷新方法返回的JSON的结构是正确的吗?

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

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

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

【讨论】:

  • 谢谢。使用括号消除了异常。然而,似乎没有发生任何变化。我试过 model.funkyThings.valueHasMutated();但是列表保持不变
  • 你也尝试过fromJSON方法吗?
  • 我都试过了。我相当肯定这是我想要的 fromJS 。我在 C# 端使用: public JsonResult RefreshJSON() { .... // 清爽的东西 // return Json(viewModel.funkyThings, JsonRequestBehavior.AllowGet); } 其他我需要使用 fromJS 的地方
  • 您能发布一个您返回的 JSON 示例吗?
  • 你的想法帮了我的忙,保罗。原始淘汰模型是使用此处的方法创建的:aaron-powell.com/javascript/creating-vms-from-server 这使用驼峰式大小写来生成 JSON。我的方法是使用 MVC Json 类,它没有产生驼峰式。将服务器 RefreshJSON 更改为返回驼峰式 JSON 后,问题已解决。感谢您的指点!
【解决方案2】:

如果返回的对象格式正确并且绑定也很好,你 只需要做:

    model.FunkyThings(returnedData).

【讨论】:

  • 考虑到:Funky things 是一个可观察数组,返回的对象是一组 funky thing 对象
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 2014-12-15
  • 2012-12-29
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
相关资源
最近更新 更多