2

我正在使用 angular-wakanda 连接器在 Wakanda 环境中工作。

假设这个模型:Employee(firstName,lastName,company) 和 Company(name)

在员工表单中,我有一个选择输入,其中填充了公司名称(这是一个实体集合)。

ng-model="selectedCompany"在选择中设置了一个

当我选择一家公司并执行保存时,我得到的值代表我在选项值(ID 或名称)中传递的值。

当我使用该方法将值分配给新实体时$create(),我不知道用哪种方式将实体设置为关系属性。我假设我必须给出一个实体。问题是我已经拥有所有实体的实体集合。所以我不明白为什么我应该再次查询服务器只是为了分配我已经拥有的东西。

所以问题是我们应该有一个类似$findor的方法$getById,它不会在服务器上执行请求,而是获取已经加载到 entityCollection 中的实体。现在我使用我自己的方法在我的数组上做一个简单的循环。(如果有人需要,我可以分享代码)

我错过了一种方法吗?

4

2 回答 2

2

假设您的selectedCompany变量包含一个实体(Company 类型),您只需在$create()调用时使用属性名称传递此变量,如下所示:

var newEmployee = ds.Employee.$create({
  firstName: 'foo',
  lastName: 'bar',
  company: $scope.selectedCompany
});

如果selectedCompany仅包含公司名称或 ID,则需要一个数组来映射公司及其名称或 ID。像这样的东西:

//When retrieving collection
var companyMap = [];
companies.forEach(function (company) {
  companyMap[company.ID] = company;
}

//When you want your company with its ID
var company = companyMap[$scope.selectedCompany];

但是最简单的方法是第一种,<select>直接遍历实体集合,这样就可以处理实体了。


编辑:检索对象ng-option

要获取您在 上迭代的对象select,您可以ng-option像这样使用:

<select
  ng-model="selectedCompany"
  ng-change="companyChanged()"
  ng-options="c.name for c in companies"
>
</select>

在控制器上

$scope.selectedCompany = null;
$scope.companyChanged = function () {
  if ($scope.selectedCompany) {
    //selectedCompany is your company entity
    //you can manipulate it like any other entity
    $scope.selectedCompany.$save(); //for example
  }
};
于 2016-02-26T09:23:48.243 回答
1

我认为你真正的问题是你迭代公司集合的每个实体的名称/ID。

这是迭代集合的坏方法:

<select ng-model="selectedCompany" ng-options="company.nom as company.nom for i in collenctionOfCompanies">
    <option value=""></option>
</select>

在这种情况下,所选公司将仅包含公司名称。

但是,如果您将代码更改为:

<select ng-model="selectedCompany" ng-options="company as company.nom for i in collenctionOfCompanies">
    <option value=""></option>
</select>

然后 selectedCompany 将包含实体

于 2016-02-26T10:28:54.173 回答