2014-06-18 184 views
0

您好我有一个JSON数组,像这样试图从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)

是否有任何好心人能够指出我在正确的方向?

+0

实际上是一个数据JSON字符串,或者已经是一个JavaScript对象?您可能需要使用ko.mapping.fromJS而不是 –

+0

与两者一起使用它,让它部分使用JS,但映射被搞砸了,所以它只映射一个项目到一个可观察数组,thx – saj

+0

我刚才使用上面声明的对象来测试它,看起来很好。我不知道它是否可能是ajax调用本身 - 你能调试并检查数据是否包含你期望传递给ko映射插件之前的内容吗? –

回答

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/

+0

嗨,叶试过这个,但我如何访问我的数组对象,我可以看到他们存在__KO_mapping_映射的属性,一切都在那里,项目是这样的[0]。映射的属性,如何迭代通过他们在HTML中与每个,这就是有点我卡住 – saj

+1

@saj看到循环更新。 – hutchonoid

+0

thx因为你的代码基本上工作,为了简洁起见,我没有包括额外的所有JSON,但它们只是字符串,但是ID显示大约10/50然后出现额外文本的负载,虽然没有HTML绑定它!!!困惑了一下,我知道$ data是为数组构建的,但是它不能从代码中引用它,并不是关于映射的全部观点是可观察的,我们如何在代码中映射后访问它们以及在HTML中? – saj