2013-03-06 13 views
5

Sono probabilmente la persona più inesperta su MVC per non parlare del caldo asciugamano spa ma mai meno sto dovrebbe produrre un sistema basato su queste tecnologie.Come utilizzare un database locale con il modello asciugamano caldo SPA su ASP.NET MVC 4

Ho letto il sito Web di Breeze e tutta la documentazione di John Papa, ma non ho idea di come creare interazioni con il mio database e recuperare dati e visualizzare dati, aggiungere o modificare dati tra cui l'eliminazione di dati.

devo costruire un cruscotto con circa 5 griglie sullo schermo la visualizzazione di dati in tempo reale come è entrando con alcuni calcoli di tempo.

Tutto quello che ho finora per 2 giorni è il modello asciugamano caldo modificato per mostrare il mio nome del progetto e ho cambiato l'icona asciugamano caldo. Non riesco a capirmi di queste cose ... Per due anni sono stato uno sviluppatore di siti Web ASP.NET a 3 livelli.

Qualcuno mi può dare indicazioni su come passare i dati attraverso questo modello?

+0

Sono nella stessa barca e si sentono esattamente come avete fatto ... Ci sembra essere tanti modi per fare queste cose ora, che è difficile puntare in una direzione e andare avanti. –

risposta

6

Ho iniziato con l'asciugamano caldo SPA, ma abbiamo usato altri riferimenti come il campione Durandal MovieApp che potete trovare qui. http://stephenwalther.com/archive/2013/02/08/using-durandal-to-create-single-page-apps.aspx. ho anche scaricato e rivisto il runtime breezejs che comprendeva i campioni.

Nel mio scenario ho utilizzato un SQL con Entity Frameworks e creato un controller WEBAPI e seguito la documentazione di breezejs. un eccetto il mio controller è sotto.

[BreezeController] 
public class ProjectBillingController : ApiController 
{ 
    readonly EFContextProvider<ProjectBillingContext> _contextProvider = 
    new EFContextProvider<ProjectBillingContext>(); 

    // ~/api/todos/Metadata 
    [HttpGet] 
    public string Metadata() 
    { 
     return _contextProvider.Metadata(); 
    } 


    [HttpPost] 
    public SaveResult SaveChanges(JObject saveBundle) 
    { 
     return _contextProvider.SaveChanges(saveBundle); 
    } 

    [HttpGet] 
    public IQueryable<Client> Clients() 
    { 
     return _contextProvider.Context.Clients; 
    } 
    ... 

Ho poi cercato di imitare la struttura di directory di codice & del Durandal film APP

/App 
/App/respositories 
/App/repositories/repository.js 
/App/viewmodels 
/App/viewmodels/clients 
/App/viewmodels/clients/show.js 
/App/viewmodels/clients/edit.js 
/App/viewmodels/clients/create.js 
/App/views/clients 
/App/views/clients/show.html 
/App/views/clients/edit.html 
/App/views/clients/create.html 

Nel mio caso ho usato un unico repository, perché non era qualsiasi query complesse, anche se per me la sua una inizio.

ma all'interno del mio repository ho definito il gestore di entità breezejs e alcune funzioni per recuperare tutte le righe e 1 riga. un estratto del codice è sotto,

// repository.js 
function getRecordLists(modelsListsObservable, errorObservable, entity) { 

    return breeze.EntityQuery 
    .from(entity) 
    .using(manager).execute() 
    .then(querySucceeded) 
    .fail(queryFailed); 

    function querySucceeded(data) { 
     modelsListsObservable(data.results); 
     logger.log('Fetched ' + entity, null, null, true); 

    } 

    function queryFailed(error) { 
     errorObservable("Error retrieving" + entity + " : " + error.message); 
     logger.error("Error retrieving" + entity + " : " + error.message, null, null, true); 

    } 
}; 


function getRecord(id, clientObservable, errorObservable, entity, entityKey) { 
    return breeze.EntityQuery.from(entity) 
    .where(entityKey, "==", id) 
    .using(manager).execute() 
    .then(querySucceeded) 
    .fail(queryFailed); 

    function querySucceeded(data) { 
     clientObservable(data.results[0]); 
     logger.log('Fetched a record from ' + entity, null, null, true); 
    } 

    function queryFailed(error) { 
     errorObservable("Error retrieving a record from " + entity + ": " + error.message); 
     logger.error("Error retrieving a record from " + entity + ": " + error.message, null, null, true); 
    } 

}; 

// show.js 
define(function (require) { 

    var repository = require("repositories/repository"); 
    var app = require('durandal/app'); 
    var router = require("durandal/plugins/router"); 
    var logger = require('services/logger'); 
    var models = ko.observableArray(); 
    var error = ko.observable(); 

    return { 
     models: models, 
     error: error, 
     deleteRecord: deleteRecord, 

     activate: function (data) { 
      return repository.getRecordLists(models, error, "Resources"); 
     } 
    }; 

Spero che questo ti aiuti un po '. Anche io sto imparando questo e alcune cose potrebbero non essere le migliori pratiche, ma è abbastanza buona per me da cui imparare.

grazie

+0

Grazie per questo, sono andato in giro come un pollo senza testa questa settimana, ma ho messo da parte lunedì per dare un'occhiata a questo e ti farò sapere come va. –

Problemi correlati