2011-09-20 22 views
2

を更新しない:Knockout.js fromJSONは、私は私が働いている次のような単純なケース持っているのViewModel

<ul data-bind='template: {name : "namesTemplate", data:viewModel}'> 
</ul> 

<script id='namesTemplate' type='text/html'> 
    {{each $data}} 
     <li>${ Name }</li> 
    {{/each}} 
</script> 

<span data-bind="click: fire">Click Me</span> 

<script type='text/javascript'> 

    var viewModel = ko.observableArray([{ "Name": "Tom" }, 
             { "Name": "Pete" }, 
             { "Name": "Dave"}]); 

    viewModel.fire = function() { 
     $.getJSON("Post", function (result) { 
      viewModel = ko.mapping.fromJSON(result); 
     }); 
    } 

    ko.applyBindings(viewModel); 

</script> 

getJSONのようなものに見えるASP.NET MVCコントローラからJSONデータを取得しています

[{"Name":"Chris"}] 

クリック時Click Me順序なしリストは更新されていません。どこが間違っていますか?

ありがとうございました。

答えて

0

は私の例を見てください:

http://jsfiddle.net/YhXyL/

var viewModel ={ 
     names: ko.observableArray([{ "Name": "Tom" }, 
           { "Name": "Pete" }, 
           { "Name": "Dave"}]) 
}; 

viewModel.fire = function() { 
    this.names([{"Name": "test"}]); 
}; 

ko.applyBindings(viewModel); 

とHTML:

<ul data-bind='template: {name : "namesTemplate", foreach:names}'></ul> 

<span data-bind="click: fire">Click Me</span> 

<script id='namesTemplate' type='text/html'> 
    <li data-bind="text: Name"/> 
</script> 

あなたはプッシュ方式を使用することができ、新しいアレイを追加したい場合は:

this.names.push([{"Name": "test"}]); 
+0

お返事をお待ちしています。これを試してみると、次のようなエラーが出ます:Uncaught TypeError:オブジェクト関数(​​d、b){var a = b?d.bind(b):d、f = new p。$ a(a、function(){paN(e 、f)}); e.push(f); return f}には 'each'というメソッドはありません - アイデアはありますか? – youwhut

2

つのアイデア:

:あなたはすでに多分あなたは ko.mapping.updateFromJSを使用する必要があり、あなたのビューモデルにデータを持っていたよう

var viewModel = { employees: ko.observableArray([{ "Name": "Tom" }, 
               { "Name": "Pete" }, 
               { "Name": "Dave"}]); 
}; 

2):

1)あなたのビューモデルにあなたの特性に名前を付けます

viewModel.fire = function() { 
    $.getJSON("Post", function (result) { 
     ko.mapping.updateFromJS(viewModel.employees, result); 
    }); 
} 
関連する問題