Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Breeze 获取一条数据库记录,显示它,更新它,并将其保存回数据库_Breeze - Fatal编程技术网

Breeze 获取一条数据库记录,显示它,更新它,并将其保存回数据库

Breeze 获取一条数据库记录,显示它,更新它,并将其保存回数据库,breeze,Breeze,解决了!这是一个令人扫兴的问题(装订错误)。但可能有人喜欢就代码(dataservice、viewmodel等)进行争论或评论 我尝试构建一个Breeze示例,在那里我得到一条数据库记录(使用fetchEntityByKey),显示它以进行更新,然后使用保存按钮将更改写回数据库。我想不出如何让它工作 我尝试使用一个数据服务('class')和一个视图模型('class'),将带有敲除的视图模型绑定到视图 如果有人能提供样品或提示,我将不胜感激 谢谢你,哈利 var dataservice =

解决了!这是一个令人扫兴的问题(装订错误)。但可能有人喜欢就代码(dataservice、viewmodel等)进行争论或评论

我尝试构建一个Breeze示例,在那里我得到一条数据库记录(使用fetchEntityByKey),显示它以进行更新,然后使用保存按钮将更改写回数据库。我想不出如何让它工作

我尝试使用一个数据服务('class')和一个视图模型('class'),将带有敲除的视图模型绑定到视图

如果有人能提供样品或提示,我将不胜感激

谢谢你,哈利

 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做了一些错误的事情。也许你想评论一下上面的代码。。。谢谢!