1

JSON結果をノックアウトjsにバインドする際に問題があります。以下は私のコードです

var AddDeparmentViewModel = function() {
var self = this;
self.AddDepartmentModel = {};
$.getJSON('/EventTracker/Department/GetEmptyModel/', function(data) {
    ko.mapping.fromJS(data, {}, self.AddDepartmentModel);
});
};

$(document).ready(function() {
var departmentViewModel = new AddDeparmentViewModel();
ko.applyBindings(departmentViewModel);
})

ここに私のHTMLがあります:

<div class="titleWrapper">
        Add Department
    </div>
    <label>Department Name:</label>
    <input data-bind="value: AddDepartmentModel.DepartmentName" id="departmentNameTextbox" type="text" />
    <p data-bind="text: AddDepartmentModel.DepartmentName"></p>

返される値が表示されません。誰かが私の間違いを指摘できますか。この場合、サーバーはオブジェクトの配列ではなく単一のオブジェクトを返しています。

ありがとう!

編集:

サーバーは次の JSON を返します: {"DepartmentID":0,"DepartmentName":"Test","EVNTTRKR_Admins":[],"EVNTTRKR_Event": [],"EVNTTRKR_ItemCategories":[]}

編集:

関数 GetEmptyModel は次のとおりです。

 public JsonResult GetEmptyModel()
        {
            var eventT = new EVNTTRKR_Departments();
            eventT.DepartmentName = "Test";
            return Json(eventT, JsonRequestBehavior.AllowGet);
        }
4

2 に答える 2

3

あなたが抱えている問題はかなり一般的なようです。ビューモデルをバインドした、オブザーバブルを作成しています。これが発生すると、ノックアウトがフックするものは何もなく、何もレンダリングされません。これを修正するにAddDepartmentModelは、オブザーバブルであることを確認し、fromJS で上書きするのではなく、戻り値に設定します。

var AddDeparmentViewModel = function() {
    var self = this;   
    self.AddDepartmentModel = ko.observable({}); //important to have a default value so bindings dont break
    $.getJSON('/echo/json/', function(data){
        var mapped = ko.mapping.fromJS(data);        
        self.AddDepartmentModel(data); // here we are pushing values into the observable
    });
};

AddDepartmentModelこれには、関数として呼び出す必要があるため、バインディングの修正も必要です。

<input data-bind="value: AddDepartmentModel().DepartmentName" id="departmentNameTextbox" type="text" />

コールバックでのjsonリクエストと人口のフィドルの例。 http://jsfiddle.net/infiniteloops/YWC9N/

于 2013-05-17T04:26:44.677 に答える
0

ここで jsfiddleを作成し、getJson 呼び出しをサーバー データに置き換えました (getJson URL を呼び出すことができないため)。そして、すべてうまくいっているように見えるので、getJson 呼び出しでエラーが発生していると思われます。

ブラウザの開発者ツールを開いて、コンソールでエラーを探してください。エラーがあり、その意味がわからない場合は、元の問題の説明にエラー情報を追加してください。

var AddDeparmentViewModel = function() {
    var self = this;   
    self.AddDepartmentModel = {};
    var data = 
        {"DepartmentID":0,"DepartmentName":"Test","EVNTTRKR_Admins":[],"EVNTTRKR_Event": [],"EVNTTRKR_ItemCategories":[]
        };
    ko.mapping.fromJS(data, {}, self.AddDepartmentModel);
};

$(document).ready(function() {
    var departmentViewModel = new AddDeparmentViewModel();
    ko.applyBindings(departmentViewModel);
})
于 2013-05-17T02:31:00.500 に答える