2013-03-06 16 views
5

Jestem chyba najbardziej niedoświadczony człowiek na MVC niech sam gorący ręcznik SPA, ale nigdy nie mniej jestem spodziewałem produkować system oparty w sprawie tych technologii.Jak korzystać z lokalnej bazy danych z gorącym ręcznikiem SPA na szablonie ASP.NET MVC 4

Przeczytałem stronę Breeze i całą dokumentację John Papa, ale po prostu nie mam pojęcia jak tworzyć interakcje z moją bazą danych i pobierać dane i wyświetlać dane, dodawać lub edytować dane, w tym usuwać dane.

muszę zbudować deskę rozdzielczą z około 5 siatek na ekranie wyświetlania danych na żywo, jak to idzie w niektórych obliczeń czasowych.

Wszystko, co mam do tej pory przez 2 dni jest gorący ręcznik Szablon zmodyfikowany, aby wyświetlić moją nazwę projektu i Zmieniłem ikonę gorący ręcznik. Po prostu nie mogę się tym pochwalić ... Przez dwa lata pracowałem jako programista stron ASP.NET w 3-poziomowej architekturze.

Czy ktoś może mi podać wskazówki dotyczące przekazywania danych za pośrednictwem tego szablonu?

+0

jestem w tej samej łodzi i czuję dokładnie tak jak ty ... Wydaje się, że tak wiele sposobów, aby robić te rzeczy teraz, że trudno wskazać na kierunek i iść do przodu. –

Odpowiedz

6

Zacząłem gorący ręcznik SPA, ale używane inne odniesienia, takich jak próbki Durandal MovieApp który można znaleźć tutaj. http://stephenwalther.com/archive/2013/02/08/using-durandal-to-create-single-page-apps.aspx. Pobrałem również i przejrzałem środowisko uruchomieniowe breezejs, które zawierało próbki.

W moim scenariuszu użyłem SQL z Entity Ram i stworzyła kontroler WebAPI a następnie dokumentację breezejs. z wyjątkiem mojego kontrolera jest poniżej.

[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; 
    } 
    ... 

Następnie próbowałem naśladować strukturę katalogów Durandal Film Kod & 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 

W moim przypadku użyłem jednego repozytorium, ponieważ nie było żadnych skomplikowanych zapytań, choć dla mnie jego początek.

ale w moim repozytorium umieściłem zdefiniowanego menedżera encji breezejs i kilka funkcji do pobierania wszystkich wierszy i 1 wiersza. fragment kodu znajduje się poniżej,

// 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"); 
     } 
    }; 

Mam nadzieję, że to ci trochę pomoże. Ja też się tego uczę, a niektóre z tych rzeczy mogą nie być najlepszymi praktykami, ale wystarczająco dobre, by mnie nauczyć.

dzięki

+0

Dziękuję za to, że w tym tygodniu biegałam jak głowa mniej kurczaka, ale odłożyłam na bok poniedziałek, żeby rzucić okiem na to i dam ci znać, jak to działa. –