嗯,它可以类似于How to call an arbitrary service for saving changes with breezejs,但我没有得到明确的答案。使用Breeze.js保存数据
我有Knockout.js/Breeze.js/MVC4 and No Entity Framwork
My requirement
一个应用程序 - 我需要调用的API保存按钮被点击时,用微风将数据传递给适当的控制器。
我有我的按钮单击事件为: -
//Saving Profile Details
fnSave_click = function() {
//This profileModel will have the updated data which needs to be pushed to backend
var jsonData = {};
jsonData.fName = profileModel.fName;
jsonData.lname = profileModel.lname;
// Previously i used to make an Ajax call and save the data like below commented code:-
/*
$.ajax({
type: "POST",
url: 'api/profile/ChangeProfileDetails',
dataType: "json",
contentType: 'application/json; charset=utf-8',
data: ko.toJSON(jsonData)
}).done(function (data) {
}).fail(function (request, error) {});
*/
//How do I pass my jsonData to Controller?? Is there any parameter option??
return manager.saveChanges()
.then(function() {
console.log("changes saved");
})
.fail(function() {
console.log("changes failed");
});
}
.......................
现在,我没有得到它......当我将定义我的控制器方法名称?我将如何传递这些数据?
我已经创建了我的微风经理如下: -
// Start - Created breeze data service and manager for query on profile controller
var dataService = new breeze.DataService({
serviceName: "api/Profile",
hasServerMetadata: false // don't ask the server for metadata,
});
var manager = new breeze.EntityManager({
dataService: dataService
});
我已经开始用微风一天。所以请让我知道如果我做错了什么。
[更新]
最后,对于ToDo app with Knockout and Breeze.js
这是很好的解释here。我是没有得到 - 请问这是怎么SaveChanges
(控制器),点击保存时被调用。
function saveChanges() {
return manager.saveChanges()//How does this calls SaveChanges method of controller
.then(function() { logger.success("changes saved"); })
.fail(saveFailed);
}
如果我需要调用其他API方法,如'api/Test/MyMethod'
,我需要做什么?
[更新2] @Jay Traband
。在您回复之后,我想更新我的问题。
我已经通this link of release note其中规定: -
添加 “命名保存”。默认情况下,EntityManager.saveChanges方法 发送一个保存请求到一个名为“SaveChanges”的端点。通过“命名为 保存”,您可以在另一个Web API控制器上定位不同的服务器端点,例如 任意命名的操作方法。有 是SaveOptions类中的两个新属性。一个资源名称(用于操作方法的 )和一个dataService(用于定位不同的 控制器)。假设你要保存所有待定更改,则 可以写
var so = new SaveOptions({
resourceName: "myCustomSave"
});
// null = 'all-pending-changes'; saveOptions is the 2nd parameter
myEntityManager.SaveChanges(null, so);
我试过这样的,
我有我的JS文件代码 -
debugger;
var option = new breeze.SaveOptions({ resourceName: 'myCustomSave' })
return manager.saveChanges(null, option)
和我的控制器作为: -
[HttpPost]
public SaveResult MyCustomSave(JObject saveBundle)
{
return null;
}
现在 - 在控制台中抛出没有错误,并且它不会调用我的控制器方法 d。
@kadumel - 如果我没有错,那么元数据是实体框架的上下文。我没有,所以我已经将'dataService'定义为'hasServerMetadata:false'。现在'EntityManager'被定义为'var manager = new breeze.EntityManager({dataService:dataService });'。 – Shubh
@kadumel: - 我想这可能没有EF。在查看[无DB-Breeze.js](http://www.breezejs.com/samples/nodb)后,我的灵感来自EF。不知道为什么它不工作在我的情况:(谢谢。 – Shubh
你可以在这里找到解决方案[保存更改使用微风没有实体框架](http://stackoverflow.com/questions/17767789/saving-changes-using-breeze -without-entity-framework/17778159#17778159) – Anna