我可能是MVC上最缺乏经验的人,更不用说Hot Towel SPA了,但是我希望能够生产出基于这些技术的系统。
我已经阅读了Breeze网站和John Papa的所有文档,但我根本不知道如何创建与数据库的交互并检索数据和显示数据,添加或编辑数据,包括删除数据。
我必须在屏幕上构建一个大约5个网格的仪表板,显示实时数据,并进行一些时间计算。
到目前为止我所有的2天都是热毛巾模板修改后显示我的项目名称,我已经更改了热毛巾图标。我无法绕过这些东西......两年来,我一直是一个三层架构的ASP.NET网站开发人员。
有人可以提供有关如何通过此模板传递数据的指南吗?
答案 0 :(得分:6)
我从Hot Towel SPA开始,但使用了其他参考资料,例如您可以在这里找到的Durandal MovieApp示例。 http://stephenwalther.com/archive/2013/02/08/using-durandal-to-create-single-page-apps.aspx。 我还下载并查看了包含样本的breezejs运行时。
在我的场景中,我使用带有实体框架的SQL并创建了一个WEBAPI控制器并遵循breezejs文档。我的控制器除外。
[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;
}
...
然后我试图模仿代码&amp; Durandal电影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
在我的情况下,我使用了一个存储库,因为它不是任何复杂的查询,尽管对我来说它是一个开始。
但在我的存储库中,我放置了定义的breezejs实体管理器和一些函数来检索所有行和1行。下面是代码的摘录,
// 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");
}
};
我希望这对你有所帮助。我也在学习这个,有些东西可能不是最佳实践,但它足以让我学习。
感谢