如何将可观察的 属性 添加到从 mvc 4 class 加载的 knockout.mapping
how to add an observable property to a knockout.mapping loaded from mvc 4 class
我正在研究 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,其中包含一个材料列表,然后将其发送到视图。
在视图中我有这个。
@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>
使用上述功能,我可以读取数据并将数据发送到服务器并在控制器上执行操作,但是我需要添加删除或操作视图中的信息。
所以问题是:如何向 'mvcModel' 添加函数以便在 ListaMateriasPlan 对象中推送新的 "materia"?
谢谢,如果您有更多提示以便更好地理解它,我感谢您的帮助。
映射插件创建的 mvcModel
将具有可观察的属性。
例如,要添加新的 "materia",请执行以下操作:
function Materias() {
this.MateriaId = ko.observable();
this.NombreMateria = ko.observable();
}
var newItem = new Materias();
newItem.MateriaId(3);
newItem.NombreMateria("Ingenieria 3");
mvcModel.PlanEstudioActual.ListaMateriasPlan.push(newItem);
通常,您会将 "adding" 逻辑包装为视图模型中的方法。
我正在研究 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,其中包含一个材料列表,然后将其发送到视图。
在视图中我有这个。
@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>
使用上述功能,我可以读取数据并将数据发送到服务器并在控制器上执行操作,但是我需要添加删除或操作视图中的信息。
所以问题是:如何向 'mvcModel' 添加函数以便在 ListaMateriasPlan 对象中推送新的 "materia"?
谢谢,如果您有更多提示以便更好地理解它,我感谢您的帮助。
映射插件创建的 mvcModel
将具有可观察的属性。
例如,要添加新的 "materia",请执行以下操作:
function Materias() {
this.MateriaId = ko.observable();
this.NombreMateria = ko.observable();
}
var newItem = new Materias();
newItem.MateriaId(3);
newItem.NombreMateria("Ingenieria 3");
mvcModel.PlanEstudioActual.ListaMateriasPlan.push(newItem);
通常,您会将 "adding" 逻辑包装为视图模型中的方法。