【问题标题】:Trying to map array from JSON to knockout using mappings尝试使用映射将数组从 JSON 映射到淘汰赛
【发布时间】:2014-06-18 21:41:08
【问题描述】:

嗨,我有一个这样的 JSON 数组

[{
    "id": "537901a53513fa3374bec718",
    "images": [],
    "itemImage": "img/3.jpg",
    "createdDate": "5/18/2014 6:53:25 PM",
    "location": [
        -2.057802,
        52.609711
    ]
},
{
    "id": "537901a53513fa3374bec710",
    "images": [
        "img/17.jpg"
    ],
    "itemImage": "img/1.jpg",
    "createdDate": "5/18/2014 6:53:25 PM",
    "location": [
        -2.062251,
        52.612397
    ]
}]

我正在尝试使用 ko.mapping.fromJSON / JS,但我一直在搞砸叹息:(

  var viewModel = {};

在我的 Ajax 成功函数中,

  viewModel.model = ko.mapping.fromJSON(data);
  ko.applyBindings(viewModel);

HTML

   <div data-bind=" foreach: model">
       <div data-bind="text: body"></div>
   </div>            

我已尝试关注 John Papa 回答的这篇文章,但我认为我的数组有所不同。 Knockout JS mapping plugin confusion 我可以手动完成,但对手动构建视图模型感到厌烦:)。

也试过这个,但更困惑Can't map JSON object to ViewModel (knockout js)

有好心人能指点我正确的方向吗?

【问题讨论】:

  • 数据实际上是 JSON 字符串,还是已经是 javascript 对象?您可能需要改用 ko.mapping.fromJS
  • 两者都试过了,让它部分地与 JS 一起工作,但映射被搞砸了,所以它只将一个项目映射到一个可观察的数组,thx
  • 我刚刚使用上面声明的对象对其进行了测试,看起来还不错。我想知道它是否可能是 ajax 调用本身 - 在将数据传递给 ko 映射插件之前,您能否调试并检查数据是否包含您期望的内容?
  • 嗨,数据没有改变,这是提琴手的输出,根据那里的验证器,它也是有效的 JSON!
  • 那么viewModel.model 在映射之后实际上包含什么?您是否在控制台中遇到任何错误?

标签: javascript json knockout-2.0 knockout-mapping-plugin


【解决方案1】:

您需要做的就是:

var viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);

你循环它们如下:

<table class="table table-striped">
        <tbody data-bind="foreach: $data">
            <tr>

                <td data-bind="text: id"></td>
            </tr>
        </tbody>
    </table>

参见此处的示例:

http://jsfiddle.net/wr5W7/5/

【讨论】:

  • 嗨,耶试过这个,但是我如何访问我的数组对象,我可以看到它们存在于映射属性的 _KO_mapping 中,一切都在那里,项目是这样的[0] .body 在映射属性中,如何在 HTML 中使用 for each 遍历它们,这就是我卡住的地方
  • 感谢您的代码基本上可以工作,为简洁起见,我没有包含额外的所有 json,它们只是字符串,但是 Id 的显示大约为 10/50,然后是附加文本的负载出现虽然没有 HTML 绑定!!!,有点困惑,我知道 $data 是内置在这个数组中,但不能从代码中引用它,这不是关于映射的全部意义是可观察的,以及如何做我们在代码和 HTML 中映射后访问它们?
  • @saj 很抱歉不在电脑上。您可以使用属性名称引用 observable 的其他属性。如果您想添加到 js 对象,请在其中创建一个 js 函数和映射。抱歉,如果我没有正确理解您,可能值得用新示例提出另一个问题。
  • 一个问题。每次解决方案中的视图模型更改时都会应用绑定。我们该如何解决这个问题
猜你喜欢
  • 1970-01-01
  • 2014-03-20
  • 2015-07-16
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2015-03-30
相关资源
最近更新 更多