【发布时间】:2013-09-20 22:22:34
【问题描述】:
希望有人对 Breeze 的扩展实体有更好的了解,因为我很难过!因此,我在服务器端(使用 Breeze 的 API 的 Web API)创建了一个部分类 (WO_Rout),并创建了一个名为“AssetJobEqNo”的属性。
我已阅读并遵循 Breeze 的文档 here,但无济于事。按照指南,我为这个特定的实体“WO_Rout”创建了一个构造函数,如下所示:
var assets = function () {
this.AssetJobEqNo = '';
};
var serviceName = 'cms8/workorders';
var manager = new breeze.EntityManager({
serviceName: serviceName
});
var store = manager.metadataStore;
store.registerEntityTypeCtor('WO_Rout', assets);
当我查询我的控制器时,此特定属性“AssetJobEqNo”被发送并在客户端的 JSON 原始结果中看到。
所以....这是我无法弄清楚的奇怪部分。如果我运行与 UI 上的按钮相关联的查询,则加载该属性并在我分配它的对象中,但它仍然是空字符串的默认值,它永远不会加载。然后我再次运行完全相同的查询,获取相同的实体,这次值就在那里。
总之,我很困惑为什么这个扩展实体的属性没有被第一次查询填充,但是如果我运行完全相同的查询,它会在第二次加载?
希望这一切都有意义。
数据服务功能:
function getWorkOrder(reqNo) {
if (reqNo > 0) {
var query = breeze.EntityQuery.from("GetWorkOrders");
query = query.where("req_no", "==", reqNo)
.expand(["WO_RtHelp.WO_Rout", "WO_RtHelp.WO_Rout.eqptmast", "WO_RtHelp.WO_Act.WO_Resources.persmast", "WO_RtHelp.WO_Act.WO_Resources.Kits", "WO_RtHelp.WO_Act.Activity", "WO_RtHelp.WO_Act.WO_Resources.customer", "WO_RtHelp.WO_Act.WO_Resources.eqptmast", "WO_RtHelp.WO_Act.WO_Resources.invsite.invmast", "WO_RtHelp.WO_Act.WO_Resources.crew"])
return manager.executeQuery(query);
} else {
return throwNotification('Please enter a Work Order number.');
}
}
成功查询的控制器函数
function querySucceeded(data) {
$scope.WorkOrder = {};
if (data.results.length === 0) {
sysErrorNotification('No Work Order with System #' + $scope.workOrderSearchNumber);
}
else {
$scope.WorkOrder = data.results[0];
$scope.myData = $scope.WorkOrder.WO_RtHelp;
$('#bottomNav a[href="/WorkOrders/#woMain"]').tab('show');
resetDataSources();
$scope.$apply();
}
}
我正在使用 Breeze、Angular、Q 和 jQuery
【问题讨论】:
-
我没有使用过微风,所以这可能是一个无知的问题,但是 querySucceeded 是如何被调用的呢?你有手表吗?您说您可以看到请求发生并且数据得到更新,但是是什么触发了角度来执行范围应用(或者您的函数具有应用到触发)?从控制台,这是否使它工作? angular.element($("[ng-app]")).scope().$apply();
-
根据dataservice中的函数调用。在调用数据服务的函数中有一个 .then(querySucceeded) 和 .fail(queryFailed) 来路由查询结果。不,这并不能使它工作,因为我已经从角度范围内调用了 apply 方法。
-
这里是查询被调用的地方: $scope.getAllWorkOrders = function () { workOrderDataservice.getWorkOrder($scope.workOrderSearchNumber) .then(querySucceeded) .fail(queryFailed); };
标签: entity-framework angularjs breeze