ASP.Net MVC 3 +ノックアウト-2.1.0に取り組んでおり、koGridをレンダリングしようとしていますが、koGridを更新する代わりに空にするAjaxの問題があります(私たちは考えています)。
初期状態では、koGridのデータソースは2行の配列であり、これはViewModel(vm)です。
var viewModel = function() {
var self = this;
self.radioSelectedOptionValue = ko.observable('-1');
self.AvailableActiveProducts = ko.mapping.fromJS(availableActiveProductsObject);
};
ko.applyBindings(new viewModel());
AvailableActiveProductsは、グリッドのデータソースです。これはhtmlです:
<div data-bind="koGrid: { data: AvailableActiveProducts }" />
そして、グリッドは最初はうまくレンダリングされます:
問題はここから始まります。radioSelectedOptionValueが変更されると(ラジオボタンコントロールの変更で変更されます)、グリッドは更新される必要がありますが、空になります。
ラジオボタンは、ノックアウトサブスクライブ関数呼び出しで更新/変更されると予想されます。
self.radioSelectedOptionValue.subscribe(function() {
$.get('/SalesOrderManagement/GetProductsBySelection', {
typeCriteria: "g", id: 1, seasonType: "1" }, function(data) {
self.AvailableActiveProducts(data.AvailableActiveProducts);
});
}, this);
コントローラでは、このAjax呼び出しに応答するメソッドは次のとおりです。
public JsonResult GetProductsBySelection(string typeCriteria, long id, string seasonType)
{
var model = _orchestrator.GetProductsByUserCriteria(typeCriteria, id, seasonType);
return Json(model, JsonRequestBehavior.AllowGet);
}
fiddlerを使用してデバッグすると、jsonオブジェクトは(予想される3行で)返されますが、呼び出し後にグリッドは空になります。
私たちの仮説は、データがobservableArrayにどのように設定されるかが問題の一部であるというものです。このアップデートを適切にレンダリング/動作させるにはどうすればよいですか?
同じ問題で苦しんでいる他の誰かを見つけたと思いますが、KOリストに応答がありませんでした:https ://groups.google.com/forum/?fromgroups#!topic / knockoutjs / BS4ugQfV14g
これが同じ動作を示すjsFiddleです:http://jsfiddle.net/wabe/H4ZXM/7/
更新:解決しました!
Tyrsiusのコメントの後で、グリッドは数回クリックすると更新されることに気づきました。
したがって、ポップとプッシュを追加して(@Keithごとに)更新を強制すると、すべてが機能し、グリッドは期待どおりに更新されます。したがって、javascriptは次のように変更します。
self.radioSelectedOptionValue.subscribe(function() {
$.get('/SalesOrderManagement/GetProductsBySelection', { typeCriteria: "gender", id: 1, seasonType: "inseason" }, function(data) {
self.AvailableActiveProducts(data);
self.AvailableActiveProducts.push({});
self.AvailableActiveProducts.pop();
});
}, this);
プッシュアンドポップにより、最終更新/koGridが更新されます。これはキースのフィドルです:http: //jsfiddle.net/keith_nicholas/MYYNw/