jquery – 使用KnockoutJS映射插件和MVC 3创建基本网格

前端之家收集整理的这篇文章主要介绍了jquery – 使用KnockoutJS映射插件和MVC 3创建基本网格前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
搜索高低,尝试各种模式,但似乎我无法让它正常工作.有一次我在工作中有这么多的代码,我认为必须有一个更简单的方法,现在它完全破碎.我的目标…了解如何使用KO Mapping和MVC使此网格加载的基础知识,并可能使用表单来更新它.我找不到任何适合我的情况的例子.这是我现在下来的东西

这是我的行动:

public JsonResult List()
    {
        var result = new JsonResult();
        result.Data = _service.GetWeightStats();

        return Json(result,JsonRequestBehavior.AllowGet);
    }

这是我的班级:

public class WeightStat
{
    public int Id { get; set; }
    [required]
    public double Weight { get; set; }
    public double? Neck { get; set; }
    public double? Chest { get; set; }
    public double? Bicept { get; set; }
    public double? Waist { get; set; }
    public double? Hip { get; set; }
    public double? Thigh { get; set; }
    public double? Calf { get; set; }
    [required]
    public DateTime Date { get; set; }
    [required]
    public string TimeOfDay { get; set; }
    [required]
    public string DietBehavior { get; set; }

}

这是我的模板行:

<tbody data-bind='template: {name: "statRowTemplate",foreach: data.Data }'></tbody>

这是我的模板:

<script id="statRowTemplate" type="text/html">
    <tr data-bind="attr: { id: Id }">
            <td><span data-bind="text: Date"></span></td>
            <td><span data-bind="text: TimeOfDay"></span></td>
            <td><span data-bind="text: DietBehavior"></span></td>
            <td><span data-bind="text: Weight"></span></td>
            <td><span data-bind="text: Neck"></span></td>
            <td><span data-bind="text: Chest"></span></td>
            <td><span data-bind="text: Bicept"></span></td>
            <td><span data-bind="text: Waist"></span></td>
            <td><span data-bind="text: Hip"></span></td>
            <td><span data-bind="text: Thigh"></span></td>
            <td><span data-bind="text: Calf"></span></td>
    </tr>
</script>

这是我的KO JS:

<script type="text/javascript">

var data = $.getJSON('WeightTracker/List');

var viewmodel = ko.mapping.fromJSON(data);

ko.mapping.updateFromJSON(viewmodel,data);

ko.applyBindings(viewmodel);

JSON从操作中恢复:

{"ContentEncoding":null,"ContentType":null,"Data":[{"Id":1,"Weight":195.3,"Neck":10.3,"Chest":34.6,"Bicept":13.2,"Waist":34,"Hip":34,"Thigh":16.4,"Calf":8.8,"Date":"\/Date(1302554017067)\/","TimeOfDay":"Morning","DietBehavior":"Moderately"},{"Id":2,"Weight":194.3,"Neck":10.157142857142858,"Chest":34.4,"Bicept":13,"Waist":33.5,"Hip":33.5,"Thigh":16.2,"Calf":8.6000000000000014,"Date":"\/Date(1302640417070)\/",{"Id":3,"Weight":193.3,"Neck":10.014285714285714,"Chest":34.2,"Bicept":12.799999999999999,"Waist":33,"Hip":33,"Thigh":15.999999999999998,"Calf":8.4,"Date":"\/Date(1302726817070)\/",{"Id":4,"Weight":192.3,"Neck":9.8714285714285719,"Chest":34,"Bicept":12.6,"Waist":32.5,"Hip":32.5,"Thigh":15.799999999999999,"Calf":8.2000000000000011,"Date":"\/Date(1302813217070)\/",{"Id":5,"Weight":191.3,"Neck":9.72857142857143,"Chest":33.800000000000004,"Bicept":12.399999999999999,"Waist":32,"Hip":32,"Thigh":15.599999999999998,"Calf":8,"Date":"\/Date(1302899617070)\/",{"Id":6,"Weight":190.3,"Neck":9.5857142857142872,"Chest":33.6,"Bicept":12.2,"Waist":31.5,"Hip":31.5,"Thigh":15.399999999999999,"Calf":7.8000000000000007,"Date":"\/Date(1302986017070)\/",{"Id":7,"Weight":189.3,"Neck":9.4428571428571431,"Chest":33.4,"Bicept":12,"Waist":31,"Hip":31,"Thigh":15.2,"Calf":7.6000000000000005,"Date":"\/Date(1303072417070)\/",{"Id":8,"Weight":188.3,"Neck":9.3,"Chest":33.2,"Bicept":11.799999999999999,"Waist":30.5,"Hip":30.5,"Thigh":14.999999999999998,"Calf":7.4,"Date":"\/Date(1303158817070)\/",{"Id":9,"Weight":187.3,"Neck":9.1571428571428584,"Chest":33,"Bicept":11.6,"Waist":30,"Hip":30,"Thigh":14.799999999999999,"Calf":7.2000000000000011,"Date":"\/Date(1303245217070)\/",{"Id":10,"Weight":186.3,"Neck":9.0142857142857142,"Chest":32.800000000000004,"Bicept":11.399999999999999,"Waist":29.5,"Hip":29.5,"Thigh":14.599999999999998,"Calf":7.0000000000000009,"Date":"\/Date(1303331617070)\/",{"Id":11,"Weight":185.3,"Neck":8.8714285714285719,"Chest":32.6,"Bicept":11.2,"Waist":29,"Hip":29,"Thigh":14.399999999999999,"Calf":6.8000000000000007,"Date":"\/Date(1303418017070)\/",{"Id":12,"Weight":184.3,"Neck":8.72857142857143,"Chest":32.4,"Bicept":11,"Waist":28.5,"Hip":28.5,"Thigh":14.2,"Calf":6.6000000000000005,"Date":"\/Date(1303504417070)\/",{"Id":13,"Weight":183.3,"Neck":8.5857142857142872,"Chest":32.2,"Bicept":10.799999999999999,"Waist":28,"Hip":28,"Thigh":13.999999999999998,"Calf":6.4,"Date":"\/Date(1303590817070)\/",{"Id":14,"Weight":182.3,"Neck":8.4428571428571431,"Chest":32,"Bicept":10.6,"Waist":27.5,"Hip":27.5,"Thigh":13.799999999999999,"Calf":6.2000000000000011,"Date":"\/Date(1303677217070)\/",{"Id":15,"Weight":181.3,"Neck":8.3,"Chest":31.8,"Bicept":10.399999999999999,"Waist":27,"Hip":27,"Thigh":13.599999999999998,"Calf":6.0000000000000009,"Date":"\/Date(1303763617070)\/",{"Id":16,"Weight":180.3,"Neck":8.1571428571428584,"Chest":31.6,"Bicept":10.2,"Waist":26.5,"Hip":26.5,"Thigh":13.399999999999999,"Calf":5.8000000000000007,"Date":"\/Date(1303850017070)\/",{"Id":17,"Weight":179.3,"Neck":8.014285714285716,"Chest":31.400000000000002,"Bicept":10,"Waist":26,"Hip":26,"Thigh":13.2,"Calf":5.6000000000000005,"Date":"\/Date(1303936417070)\/",{"Id":18,"Weight":178.3,"Neck":7.8714285714285719,"Chest":31.200000000000003,"Bicept":9.7999999999999989,"Waist":25.5,"Hip":25.5,"Thigh":12.999999999999998,"Calf":5.4,"Date":"\/Date(1304022817070)\/",{"Id":19,"Weight":177.3,"Neck":7.7285714285714295,"Chest":31,"Bicept":9.6,"Waist":25,"Hip":25,"Thigh":12.799999999999999,"Calf":5.2000000000000011,"Date":"\/Date(1304109217070)\/",{"Id":20,"Weight":176.3,"Neck":7.5857142857142863,"Chest":30.8,"Bicept":9.3999999999999986,"Waist":24.5,"Hip":24.5,"Thigh":12.599999999999998,"Calf":5.0000000000000009,"Date":"\/Date(1304195617070)\/","DietBehavior":"Moderately"}],"JsonRequestBehavior":1}

我现在假设我完全错了这个代码,因为我没有收到任何回来,但JSON字符串.我已经修改了这么多不同的方式,我已经工作了超过2个星期,试图让这个工作,所以如果有人可以向我解释我做错了什么,给我发送knockoutjs网站的例子,没有有帮助感谢您的帮助,并使我不再生长更多的灰白色头发:/

PS.我也想使用这个mvcextension,一个朋友创建了我有工作,但我不得不做一些像data.WeightStats或某事..这么沮丧:/检查出来

public static MvcHtmlString KnockoutForModel<TModel>(this AjaxHelper<TModel> helper,bool includeScriptTags = true,bool? applyKoBindings = null)
    {
        var serializer = new JavaScriptSerializer();

        var json = "var viewmodel = ko.mapping.fromJS(" + serializer.Serialize(helper.ViewData.Model) + ");\r\n";

        if (applyKoBindings.GetValueOrDefault(includeScriptTags))
        {
            json += "ko.applyBindings(viewmodel);\r\n";
        }

        if (includeScriptTags)
        {
            json = "<script type=\"text/javascript\">\r\n" + json + "</script>\r\n";
        }

        return MvcHtmlString.Create(json);
    }

解决方法

$.getJSON要求您传递回调以处理结果,因为请求是异步完成的.所以,你想做一些像:
var viewmodel = {};

$.getJSON('WeightTracker/List',function(result) {
    viewmodel.stats = ko.mapping.fromJS(result.Data);
    ko.applyBindings(viewmodel);
});

那么,基于上面的你的模板绑定就像:

<tbody data-bind='template: {name: "statRowTemplate",foreach: stats }'></tbody>

所以,当你做$.getJSON时,在回调中,你将处理一个JavaScript对象而不是一个JSON字符串.

如果您有其他问题,将乐意帮助您.

猜你在找的jQuery相关文章