Jquery 使用KnockoutJS映射插件和MVC3创建基本网格
我到处寻找,尝试了各种模式,但似乎我无法让它正常工作。有一次我让它工作时,有那么多的代码,我想必须有一个更简单的方法,现在它完全崩溃了。我的目标。。。了解如何使用KO映射和MVC加载网格的基本知识。。并可能使用一个表单来更新它。我找不到任何适合我的情况的例子。这就是我现在的处境 以下是我的行动:Jquery 使用KnockoutJS映射插件和MVC3创建基本网格,jquery,asp.net-mvc-3,knockout.js,Jquery,Asp.net Mvc 3,Knockout.js,我到处寻找,尝试了各种模式,但似乎我无法让它正常工作。有一次我让它工作时,有那么多的代码,我想必须有一个更简单的方法,现在它完全崩溃了。我的目标。。。了解如何使用KO映射和MVC加载网格的基本知识。。并可能使用一个表单来更新它。我找不到任何适合我的情况的例子。这就是我现在的处境 以下是我的行动: public JsonResult List() { var result = new JsonResult(); result.Data = _service.
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>
我现在假设我对这段代码完全错了,因为除了JSON字符串,我没有收到任何东西。我已经用很多不同的方式修改了代码,我已经为此工作了两周多,试图让它正常工作,所以如果有人能向我解释我做错了什么,请将我发送到knockoutjs网站示例,这些示例没有帮助。提前感谢您的帮助,避免我长出更多的白发:/
另外,还要加上。。我想使用一个朋友创建的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);
}
public static MvcHtmlString KnockoutForModel(此AjaxHelper帮助程序,bool includeScriptTags=true,bool?applyKoBindings=null)
{
var serializer=新的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”;
}
如果(包括描述标签)
{
json=“\r\n”+json+”\r\n”;
}
返回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字符串
如果您还有其他问题,我们很乐意帮助您。我的英雄!我一定会接受你的提议!我知道必须有一种比我所生产的更有效的方法,现在你已经向我解释过了,我要看看我是否能想出如何添加和保存。你的代码帮助我更好地理解了KO的工作原理。再次感谢大家!!!
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);
}
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>