Breeze Entity属性名称映射

时间:2015-03-18 18:32:34

标签: angularjs sharepoint breeze

我有一个服务器JSON对象,如下所示:

{
    "Id": 58,
    "ContentTypeId": "0x010800CC86F2447E566746907284C1DE2DE7F5",
    "Title": "Rework and Drop Test",
    "Priority": "(2) Normal",
    "Status": "Waiting on someone else",
    "PercentComplete": 0,
    "AssignedToId": 93,
    "Body": "Some text",
    "StartDate": "2015-03-06T05:00:00Z",
    "DueDate": "2015-03-13T05:00:00Z"
}

我正在使用Angular-Gantt,它希望其对象具有属性from,其中上面的对象具有StartDate,然后是to,其中上面的对象具有DueDate 。有没有一种简单的方法可以将Breeze实体上的属性名称映射到JSON对象上的属性。例如,Kendo UI的模型定义具有fromField属性,我可以用它来执行此映射。

to: {
   fromField: 'DueDate'
}

我在breeze.js中尝试了以下内容

StartDate: {
   type: breeze.DataType.DateTime,
   name: 'from'
} 

from: {
   type: breeze.DataType.DateTime,
   name: 'StartDate'
}

但这些都没有奏效。我也试过nameOnServer同样缺乏结果。我知道我可以生成一个命名约定对象,但是在客户端和服务器端手写这些字段的映射的想法对我来说似乎很愚蠢,因为我有两个巨大的switch语句反向执行基本相同的操作不要让我觉得可以维持。有什么建议?我希望我在文档中遗漏了一些东西。

我正在使用v.0.2.4 breeze.labs.dataservice.abstractrest.jsv.0.2.3 breeze.labs.dataservice.sharepoint.js

修改
我刚刚更新到最新版本,我仍然看到完全相同的东西。

在我的实体上使用具有nameOnServer属性的命名约定对象。但我宁愿不这样做。

function AngularGanttNamingConvention() {
  return new breeze.NamingConvention({
    name: 'angularGanttNamingConvention',
    clientPropertyNameToServer: clientPropertyNameToServer,
    serverPropertyNameToClient: serverPropertyNameToClient
  });
  function clientPropertyNameToServer(propertyName) {
    return fixUpClientProperty(propertyName);
  }
  function fixUpClientProperty(propertyName) {
    var newName;
    switch (propertyName) {
        case "DueDate":
            newName = "to";
            break;
        case "to":
            newName = "DueDate";
            break;

        case "StartDate":
            newName = "from";
            break;
        case "from":
            newName = "StartDate";
            break;                    
        case "Title":
            newName = "name";
            break;
        case "name":
            newName = "Title";
            break;                    
        default:
            newName = propertyName;
    }
    return newName;
  }

  function serverPropertyNameToClient(propertyName) {
    return fixUpClientProperty(propertyName);
  }
}
AngularGanttNamingConvention().setAsDefault();

0 个答案:

没有答案