Sto utilizzando MVC, ma ho letto che MVVM è una sorta di associazione dati e di puro markup nelle visualizzazioni che i dati si collegano al back-end tramite gli attributi data- *. Ho visto il knockout ma sembra un livello piuttosto basso e mi sento come se potessi creare una libreria che lo faccia ed è molto più facile da usare, in pratica basterà chiamare 1 funzione javascript che i dati legheranno l'intera pagina a causa del dati- * attributi che assegni ad elementi html.
I vantaggi di questo (che vedo) sono che la tua vista è completamente disaccoppiata dal tuo back-end in modo che una determinata vista non debba mai essere cambiata se il tuo back-end cambia (es. per le persone asp.net non più rasoio nella tua vista che rende la tua vista specifica per MS).
La mia domanda sarebbe, so che là fuori ci sono i knockout ma ci sono altri che forniscono questa funzionalità di associazione dei dati per le applicazioni di tipo MVC? Non voglio ricreare qualcosa che potrebbe già esistere, ma voglio creare qualcosa di "migliore" e più facile da usare rispetto a quello ad eliminazione diretta.
Per dare un esempio di cosa intendo, ecco tutto il codice che occorrerebbe per ottenere l'associazione dei dati nella mia libreria. Questo non è definitivo, ma mostra solo l'idea che tutto ciò che devi fare è chiamare 1 funzione javascript e impostare alcuni valori di attributo data- * e tutto si lega. Vale la pena vedere questo?
<script>
$(function () {
// this is all you have to call to make databinding for POST or GET to work
DataBind();
});
</script>
<form id="addCustomer" data-bind="Customer" data-controller="Home" data-action="CreateCustomer">
Name: <input type="text" data-bind="Name" data-bind-type="text" />
Birthday: <input type="text" data-bind="Birthday" data-bind-type="text" />
Address: <input type="text" data-bind="Address" data-bind-type="text" />
<input type="submit" value="Save" id="btnSave" />
</form>
=================================================
// controller action
[HttpPost]
public string CreateCustomer(Customer customer)
{
if(customer.Name == "Rick")
return "success";
return "failure";
}
// model
public class Customer
{
public string Name { get; set; }
public DateTime Birthday { get; set; }
public string Address { get; set; }
}