如何将一个observable属性添加到从mvc 4类加载的knockout.mapping中

时间:2016-03-23 17:52:42

标签: asp.net-mvc knockout.js knockout-mapping-plugin

我正在使用mvc4和knockout试图了解你可以使用它的所有很酷的东西。

问题是,我有这个代码加载信息并将其发送到视图。

public ActionResult AdministraContenidoAlumno()
{
Alumno NuevoAlumno = new Alumno();
            NuevoAlumno.AlumnoId = 1;
            NuevoAlumno.NombreCompleto = "Luis Antonio Vega Herrera";
            NuevoAlumno.PlanEstudioActual = new PlanEstudio
            {
                PlanEstudioId = 1,
                NombrePlan = "Ingenieria en sistemas",
            ListaMateriasPlan = new List<Materias> {
                        new Materias{MateriaId=1,NombreMateria="ingenieria 1"},new Materias{MateriaId=2,NombreMateria="Ingenieria 2"}
                }
        };
        return View(NuevoAlumno);

基本上,创建一个新的对象alumno,其中包含一个PlanEstudio,其中包含Materias列表,然后将其发送到视图。

在视图中我有这个。

@model MvcRCPG.Models.Alumno

@{
    ViewBag.Title = "AdministraContenidoAlumno";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<script>
    var data;
    $(function () {
        var jsonModel =             '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model))';
        var mvcModel = ko.mapping.fromJSON(jsonModel);
        data = mvcModel;
        ko.applyBindings(mvcModel);
    });
    function Guardar() {
        $.ajax({
            url: "/DemoKnockuot/GuardarAlumno",
            type: "POST",
            data: JSON.stringify({ 'NuevoAlumno': ko.toJS(data) }),
            dataType: "json",
            traditional: true,
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                if (data == "Success") {
                    alert('entro')
                } else {
                    alert('trono')
                }
            },
            error: function () {
                alert("An error has occured!!!");
            }
        });
    }
</script>

通过上面提到的功能,我可以读取数据并将数据发送到服务器并在控制器上执行操作,但是我需要在视图中添加删除或操作信息。

所以问题是:如何将功能添加到&#39; mvcModel&#39;为了推动一个新的&#34; materia&#34;在ListaMateriasPlan对象中?

谢谢你,如果你有更多的提示,为了更好地理解它,我感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

映射插件创建的assert(v.data() <= mypointer && mypointer < v.data()+v.size()); v.erase(v.begin() + (mypointer - v.data())); 将具有可观察的属性。

例如,要添加新的“materia”,请执行以下操作:

mvcModel

通常,您可以将“添加”逻辑作为视图模型中的方法包装。