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 回答