Breeze 获取一条数据库记录,显示它,更新它,并将其保存回数据库
解决了!这是一个令人扫兴的问题(装订错误)。但可能有人喜欢就代码(dataservice、viewmodel等)进行争论或评论 我尝试构建一个Breeze示例,在那里我得到一条数据库记录(使用fetchEntityByKey),显示它以进行更新,然后使用保存按钮将更改写回数据库。我想不出如何让它工作 我尝试使用一个数据服务('class')和一个视图模型('class'),将带有敲除的视图模型绑定到视图 如果有人能提供样品或提示,我将不胜感激 谢谢你,哈利Breeze 获取一条数据库记录,显示它,更新它,并将其保存回数据库,breeze,Breeze,解决了!这是一个令人扫兴的问题(装订错误)。但可能有人喜欢就代码(dataservice、viewmodel等)进行争论或评论 我尝试构建一个Breeze示例,在那里我得到一条数据库记录(使用fetchEntityByKey),显示它以进行更新,然后使用保存按钮将更改写回数据库。我想不出如何让它工作 我尝试使用一个数据服务('class')和一个视图模型('class'),将带有敲除的视图模型绑定到视图 如果有人能提供样品或提示,我将不胜感激 谢谢你,哈利 var dataservice =
var dataservice = (function () {
var serviceName = "/api/amms/";
breeze.NamingConvention.camelCase.setAsDefault();
var entityManager = new breeze.EntityManager(serviceName);
var dataservice = {
serviceName: serviceName,
entityManager: entityManager,
init: init,
saveChanges: saveChanges,
getLocation: getLocation
};
return dataservice;
function init() {
return getMetadataStore();
}
function getMetadataStore() {
return entityManager.fetchMetadata()
.then(function (result) { return dataservice; })
.fail(function () { window.alert("fetchMetadata:fail"); })
.fin(function () { });
}
function saveChanges() {
return entityManager.saveChanges()
.then(function (result) { return result; })
.fail(function () { window.alert("fetchEntityByKey:fail"); })
.fin(function () { });
}
function getLocation() {
return entityManager.fetchEntityByKey("LgtLocation", 1001, false)
.then(function (result) { return result.entity; })
.fail(function () { window.alert("fetchEntityByKey:fail"); })
.fin(function () { });
}
})();
var viewmodel = (function () {
var viewmodel = {
location: null,
error: ko.observable(""),
init: init,
saveChanges: null
};
return viewmodel;
function init() {
return dataservice.init().then(function () {
viewmodel.saveChanges = dataservice.saveChanges;
return getLocation();
})
}
function getLocation() {
return dataservice.getLocation().then(function (result) {
return viewmodel.location = result;
})
}
})();
viewmodel.init().then(function () {
ko.applyBindings(viewmodel);
});
很高兴你解决了。无法避免地注意到,您添加了大量的“不做任何事情”回调。我想不出做那件事的理由。您还明确要求元数据。但是对
fetchEntityByKey
的调用会隐式地为您实现这一点,因为正如您所称的,它将始终转到服务器
此外,最好在dataservice内的fail回调中重新抛出错误,以便调用方(例如ViewModel)可以添加自己的fail处理程序。如果没有重新抛出,调用方的失败回调将听不到它(Q promise机器的行为就好像第一个失败处理程序“解决”了问题)
因此,您的数据服务可以缩减为:
var dataservice = (function () {
breeze.NamingConvention.camelCase.setAsDefault();
var serviceName = "/api/amms/";
var entityManager = new breeze.EntityManager(serviceName);
var dataservice = {
serviceName: serviceName, // why are you exporting this?
entityManager: entityManager,
saveChanges: saveChanges,
getLocation: getLocation
};
return dataservice;
function saveChanges() {
return entityManager.saveChanges()
.fail(function () {
window.alert("saveChanges failed: " + error.message);
throw error; // re-throw so caller can hear it
})
}
function getLocation() {
return entityManager.fetchEntityByKey("LgtLocation", 1001, false)
.then(function (result) { return result.entity; })
.fail(function () {
window.alert("fetchEntityByKey failed: " + error.message);
throw error; // re-throw so caller can hear it
})
}
})();
var dataservice=(函数(){
breeze.NamingConvention.camelCase.setAsDefault();
var serviceName=“/api/amms/”;
var entityManager=new breeze.entityManager(serviceName);
var数据服务={
serviceName:serviceName,//为什么要导出此文件?
entityManager:entityManager,
saveChanges:saveChanges,
getLocation:getLocation
};
返回数据服务;
函数saveChanges(){
返回entityManager.saveChanges()
.fail(函数(){
警告(“保存更改失败:+错误消息”);
抛出错误;//重新抛出,以便调用方能够听到
})
}
函数getLocation(){
返回entityManager.fetchEntityByKey(“LgtLocation”,1001,false)
.then(函数(结果){return result.entity;})
.fail(函数(){
警告(“fetchEntityByKey失败:+错误消息”);
抛出错误;//重新抛出,以便调用方能够听到
})
}
})();
我不想把这个看得太重。也许你给我们的是更实质的东西的精简版。但是,如果您(或读者)认为这些方法总是必要的,我想说明的是它们不是。您能粘贴一个代码示例吗?调用saveChanges时是否出现错误?嗨,Richard。。。我已经在上面添加了代码。不,我没有从saveChangesHi Richard的调用中得到错误。。。这不是Breeze的编码问题,我用Knockout做了一些错误的事情。也许你想评论一下上面的代码。。。谢谢!