我正在使用angular-wakanda连接器在Wakanda环境中工作。
假设此模型:Employee(firstName,lastName,company)和Company(name)
在员工表单中,我有一个填充公司名称(实体集合)的选择输入。
我在选择
中设置了public static void insertionSort(int[] array)
当我选择一家公司并执行保存时,我获得的值代表我在我的选项(ID或名称)的值中传递的值。
当我使用ng-model="selectedCompany"
方法将值分配给新实体时,我不知道将实体设置为关系属性的方法。我假设我必须给一个实体。问题是我已经拥有了所有实体的entitycollection。所以我没有看到为什么我应该再次查询服务器只是为了分配我已经拥有的东西。
所以问题是我们应该有一个像$create()
或$find
这样的方法,它不会在服务器上执行请求,而是获取已经在entityCollection中加载的实体。现在我使用我自己的方法在我的数组上做一个简单的循环。 (如果有人需要,我可以分享代码)
我错过了这样做的方法吗?
答案 0 :(得分:2)
假设您的selectedCompany
变量包含一个实体(公司类型),您只需要在$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
}
};
答案 1 :(得分:1)
我认为您真正的问题是您在公司集合的每个实体的名称/ ID上进行迭代。
这是迭代集合的坏方法:
parent_model_object.nested_model_name.previous_changes
在这种情况下,所选公司将仅包含公司名称。
但是如果你改变你的代码:
<select ng-model="selectedCompany" ng-options="company.nom as company.nom for i in collenctionOfCompanies">
<option value=""></option>
</select>
然后selectedCompany将包含实体