我正在调用我的breezeController,从Northwind获取产品。我已经读过您可以跟踪实体的更改并保存远程服务上的所有更改,并调用 saveChanges()。
我找不到的是如何更新实体属性。如何更改ProductID(1)的ProductName?
注意:我没有使用Knockout,也没有使用AngularJS。它是一个简单的HTML文件。
我打电话:
var loadProducts = function(categoryID) {
var query = breeze.EntityQuery
.from("Products")
.where("CategoryID", "eq", categoryID)
.orderBy("ProductName");
return manager.executeQuery(query);
}
loadProducts(value).then(function (data) {
$("#tableBody").empty();
data.results.forEach(function (item) {
console.log(item.ProductName);
});
}).fail(function (error) {
console.log(error);
});
在致电 saveChanges()之前,我需要做些什么?
EDIT =>解决方案:
我最终使用的是 getEntityByKey()来修改特定实体。
var productToModify;
managerProducts = new breeze.EntityManager(serviceName);
功能:
var loadProducts = function (categoryID) {
var query = breeze.EntityQuery
.from("Products")
.where("CategoryID", "eq", categoryID)
.orderBy("ProductName");
return managerProducts.executeQuery(query);
}
var loadProductByID = function (productID) {
var query = breeze.EntityQuery
.from("Products")
.where("ProductID", "eq", productID);
return managerProducts.executeQueryLocally(query);
}
呼叫
// Called when clicking edit on table item. Load a form for edit
$("#tableBody").on("click", ".edit", function () {
productToModify = $(this).closest(".trow").attr("id");
var product = loadProductByID(productToModify);
console.log(productToModify);
$("#txtPN").val(product[0].ProductName);
$("#txtSID").val(product[0].SupplierID);
$("#txtUP").val(product[0].UnitPrice);
$("#txtUIS").val(product[0].UnitsInStock);
$("#txtUOO").val(product[0].UnitsOnOrder);
$("#txtD").val(product[0].Discontinued);
$(".table").fadeOut(200, function () {
$("#editProduct").fadeIn(200);
});
});
$("#btnSave").on("click", function () {
if ($("#selectSupplier").val() === "0") {
alert("Must select supplier");
}
else {
console.log(productToModify);
var product = managerProducts.getEntityByKey("Product", productToModify);
product.ProductName = $("#txtPN").val();
product.SupplierID = $("#txtSID").val();
product.UnitPrice = $("#txtUP").val();
product.UnitsInStock = $("#txtUIS").val();
product.UnitsOnOrder = $("#txtUOO").val();
product.Discontinued = $("#txtD").val();
console.log(product.entityAspect.entityState.name);
managerProducts.saveChanges().then(function () {
$("#" + productToModify).children(".pn").text($("#txtPN").val());
$("#" + productToModify).children(".psid").text($("#selectSupplier").val());
$("#" + productToModify).children(".pup").text($("#txtUP").val());
$("#" + productToModify).children(".puis").text($("#txtUIS").val());
$("#" + productToModify).children(".puoo").text($("#txtUOO").val());
$("#" + productToModify).children(".pd").text($("#txtD").val());
$("#editProduct").fadeOut(200, function () {
$(".table").fadeIn(200);
});
}).fail(function (e) {
alert(e);
});
}
});
答案 0 :(得分:2)
如果您有能力预先处理您的数据,就像您回复承诺一样,这就是我首先尝试的 -
data.results.forEach(function (item) {
item.ProductName = "New Product Name";
console.log('Changes ? - ', item.entityAspect.entityState);
});
如果您正确设置产品名称,应输出更改? - isModified
答案 1 :(得分:1)
只需将新值分配给实体:
entityToUpdate = data[0];
entityToUpdate.ProductName = 'new value' // entityToUpdate.entityAspect.entityState is updated
manager.saveChanges().then(...) // send data to the server
Breeze文档非常好:http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#method_saveChanges